需求分析

免费的小说网比较多,我看的比较多的是笔趣阁。这个网站基本收费的章节刚更新,它就能同步更新,简直不要太叼。既然要批量下载小说,肯定要分析这个网站了…



在搜索栏输入地址后,发送post请求获取数据,然后根据url解析,模拟操作即可。打开Fiddler,chrome搜索一下伏天氏,然后看看抓取到的日志流:



代码实现

在我们开始编码前,先得看下parameters中的这几个参数。

searchkey是什么鬼?

这是因为在因特网上传送URL,只能采用ASCII字符集。所以当传输中文时,有些网站会将中文进行编码后传输,再通过后台解码。那在python中该怎么做呢:

from urllib.parse import quote
quote('伏天氏')
'%E4%BC%8F%E5%A4%A9%E6%B0%8F'
# 为什么和Fiddler显示字符串不一样?
# 因为这个网站使用的gbk编码...
# 按照下面这样操作即可
quote('伏天氏',encoding='gbk')
'%B7%FC%CC%EC%CA%CF'

ct又是什么鬼?

我不知道,开始以为是临时参数,但试了好几次都是一样的,最后算了下:

102410242 = 2091752 …应该是网站那里需要进行限制的吧…

剩下的两个参数照着写就行了,先来一段代码测试下:

# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清风Python
# @Date : 2019/6/30 23:51
# @Software : PyCharm
# @version :Python 3.7.3
# @File : a.py import requests
from urllib.parse import quote session = requests.session() headers = {"User-Agent": ("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36")
}
url = ('http://www.biquge.cm/modules/article/sou.php?'
'searchkey=%s&ct=2097152&si=biquge.cm&sts=biquge.cm') % quote("伏天氏", encoding='gbk')
result = session.post(url, headers=headers)
result.encoding = 'gbk'
print(result.text)

查看下结果,一切ok。标红这个id='list'是因为,当找不到小说的时候,就定位不到这个元素了。所以可以用来判断返回结果。解析url,然后获取所有的a标签text以及href和首页进行拼接,就可以实现跳转至每章内容了…

那么要使用requests+beautifulsoup进行二连击?No…上周五咱们说了requests_html这个模块,接着复习下呗…代码片段说明下:

from urllib.parse import  urljoin
# 根据url获取所有章节标签
response = self.post_method(post_url)
novel_data = response.html.find('#list a')
for chapter in novel_data :
chapter_name = chapter.text
chapter_url = urljoin(self.URL, chapter.attrs['href'])

这里注意下,url的拼接,如果你很闲可以自己写,如果你懒,直接使用urljoin即可。

每章内容的定位比较简单,就不再赘述了。

人性化下载

要想产品做得好,首先需要在需求分析的时候有亲身的体验与调研。

作为多年书虫,对于书友们太了解了,很多人看小说都会有养书的习惯,攒上个几十章,然后一次看个够。

完了再换其他的小说接着看,等攒够了再来刷。

按照咱么这样每次去通篇下载,不仅浪费时间也太不人性化了…

所以,增加了如下方式:

看到这些参数大家因该知道了,没错,使用列表切片进行动态下载!

打包exe使用

代码写完了,但是每次下载都要让大家在Python环境下进行使用,未免太麻烦了吧?

通过pyinstaller将代码进行打包成exe的可执行文件。你可以在任意的电脑上直接使用。

ps:因为是咱们自己打包的exe,所以杀软获取不到证书,多数会误报…添加信任或者临时关闭一下杀软即可。

伏天氏我中午看到了1130多章,那我下载最近50章给大家演示下exe的使用吧:

怎么样,exe的使用大家还满意吗?赶紧发了文章,吧下载的文本导到手机,接着啃剩下的章节了…

至于之前发了几次的文章转语音,为什么不用?

看小说的都知道,其实就图乐子…基本都是一目十行,指望百度API的语音,读到猴年去了。

另外,其实文本转语音的工具太多了,我平时使用的比较多的就是搜狗搜索和多看阅读。

导入文本后,直接能生成章节目录,调用讯飞语音的方茴,读起来比百度API的萝莉音舒服很多。

截几张图给大家看看刚才咱们下载的文本导入效果:

狂拽炫酷叼炸天!哈哈…

The End

今天的文章就分享到这里,不知道这波福利大家是否满意呢?

为了避免不必要的纠纷,公众号内部回复**小说**,即可获取exe的下载地址…

说明:次工具仅作为Python学习用途,请勿用于其他不正当途径,谢谢。

OK,今天的内容就到这里,如果觉得有帮助,欢迎将文章或我的微信公众号【清风Python】分享给更多喜欢python的人,谢谢。

来源:华为云社区征文  作者:slaughterdevil

使用Python开发小说下载器,不再为下载小说而发愁 #华为云·寻找黑马程序员#的更多相关文章

  1. Python开发还在用virtualenv?不如了解下pipenv...#华为云·寻找黑马程序员#

    又见 Kenneth Reitz 之前公众号写了一篇文章爬虫新宠requests_html 带你甄别2019虚假大学,其中主要是为了介绍模块**requests_html,这个模块的作者还开发了req ...

  2. 使用jieba分析小说太古神王中,男主更爱谁?去文章中找答案吧!#华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  3. 将Android手机打造成你的Python开发者桌面#华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  4. #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库

    在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化.但是这种序 ...

  5. 车标知识学习网页开发,与Flask通过base64展示二进制图片 #华为云·寻找黑马程序员#

    万法同源 一直觉得可能自己不太适合搞技术,更适合在天桥底下支个摊子说书.技术的东西从来没人关注,扯东扯西的文章莫名的火.之前的一篇文章MarkDown添加图片的三种方式不管是在技术为主的CSDN还是娱 ...

  6. python让你再也不为文章配图与素材发愁,让高清图片占满你的硬盘! #华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  7. Flask开发VIP版HttpServer #华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  8. 三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员#

    2019年07月,北京,三伏天,好热啊.越热自己还越懒得动换(肉身给的信号),但是做为产品经理/交互设计师的,总想着思考些什么(灵魂上给的信号),或者是学习些什么,更有利于将来的职业发展吧,哈哈哈.工 ...

  9. 三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员#【华为云技术分享】

    2019年07月,北京,三伏天,好热啊.越热自己还越懒得动换(肉身给的信号),但是做为产品经理/交互设计师的,总想着思考些什么(灵魂上给的信号),或者是学习些什么,更有利于将来的职业发展吧,哈哈哈.工 ...

随机推荐

  1. CSPS_101

    T1 众所周知,只要在任意三个方向上有连续五颗棋子,游戏即结束. T2 又是最短路优化dp啦. T3 神奇的期望dp.还没改出来. 改出来啦!

  2. NOIP模拟 6

    考试时看了看T1,觉得是结论题,推了推没有成果,跑去看第二题, 题意很明确,求过定点的最小环,还没思考解题策略,然后觉得是水题 打了个tarjan找边双(据说会炸但是平均表现良好),在边双里暴力拆边找 ...

  3. P3067 [USACO12OPEN]平衡的奶牛群(折半暴搜)

    暴搜无疑.... 首先考虑纯暴搜...... 考虑每一个数: 选在左边集合 选在右边集合 不选 一共三种情况,用一个数组记录搜到的答案,所以暴搜是3^N的复杂度...直接死亡 于是讲折半暴搜.... ...

  4. 谷歌Chrome浏览器无法安装插件的解决方法(本文干货!)

    这个问题困扰了我很久,作为小白学习可能会用到谷歌插件,奈何谷歌也太变态,国内的环境无法正常登录谷歌账户.无法访问应用商店,而Chrome主版本号大于66的只能从Chrome应用商店下载并安装插件,各种 ...

  5. 8.3 NOIP 模拟12题解

    话说这次考试T1和T2是真的水,然而T1CE,T2TLE,T3CE 这不就是在侮辱我的智商啊!之前本机编译都是c++,以后要用c++11. 这次的T1就是一个大型找规律,我的规律都找出来了,但是竟然用 ...

  6. setAccessible()方法

    在java代码中,我们经常使用private来控制类中成员变量的访问权限,在类的外边我们一般使用get方法获取私有成员变量的值,但是如果类中没有get方法,但我们又想获取该类私有成员变量的值,该怎么办 ...

  7. php修改网站默认编码

    php修改网站默认编码网站如果header 不指定utf8默认 不是utf8 所以输入中文显示会乱码 一般都是apache不是不是utf8 打开 apache 配置文件 httpd.conf 加个 A ...

  8. 史上最详细的C语言和Python的插入排序算法

    史上最详细的C语言和Python的插入排序算法插入排序原理:所谓插入排序,就像我们在打牌(斗地主)时,整理我们自己手中自己的牌一样,就像是2,1,3,9,J,K,5,4,这四张牌.我们要把它其中的几张 ...

  9. 半自动安装 linux 系统

    基于图形软件生成应答文件,实现半自动化安装 linux 操作系统 1.yum install -y system-config-kickstart 安装生成自动化安装操作系统的应答文件 2.syste ...

  10. python:time模块

    (鱼c)time模块详解http://bbs.fishc.com/forum.php?mod=viewthread&tid=51326&extra=page%3D1%26filter% ...