zoukankan      html  css  js  c++  java
  • 使用Python开发小说下载器,不再为下载小说而发愁 #华为云·寻找黑马程序员#【华为云技术分享】

    需求分析

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

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

    Fiddleræ¥å¿

    代码实现

    在我们开始编码前,先得看下parameters中的这几个参数。
    searchkey是什么鬼?
    这是因为在因特网上传送URL,只能采用ASCII字符集。所以当传输中文时,有些网站会将中文进行编码后传输,再通过后台解码。那在python中该怎么做呢:

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

    ct又是什么鬼?
    我不知道,开始以为是临时参数,但试了好几次都是一样的,最后算了下:
    102410242 = 2091752 …应该是网站那里需要进行限制的吧…

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

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

    å°è¯´è·å

    查看下结果,一切ok。标红这个id='list'是因为,当找不到小说的时候,就定位不到这个元素了。所以可以用来判断返回结果。解析url,然后获取所有的a标签text以及href和首页进行拼接,就可以实现跳转至每章内容了…
    那么要使用requests+beautifulsoup进行二连击?No…上周五咱们说了requests_html这个模块,接着复习下呗…代码片段说明下:

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

    这里注意下,url的拼接,如果你很闲可以自己写,如果你懒,直接使用urljoin即可。
    每章内容的定位比较简单,就不再赘述了。

    人性化下载

    要想产品做得好,首先需要在需求分析的时候有亲身的体验与调研。
    作为多年书虫,对于书友们太了解了,很多人看小说都会有养书的习惯,攒上个几十章,然后一次看个够。
    完了再换其他的小说接着看,等攒够了再来刷。
    按照咱么这样每次去通篇下载,不仅浪费时间也太不人性化了…
    所以,增加了如下方式:

    ä¸è½½ç¤ºä¾

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

    打包exe使用

    代码写完了,但是每次下载都要让大家在Python环境下进行使用,未免太麻烦了吧?
    通过pyinstaller将代码进行打包成exe的可执行文件。你可以在任意的电脑上直接使用。
    ps:因为是咱们自己打包的exe,所以杀软获取不到证书,多数会误报…添加信任或者临时关闭一下杀软即可。
    伏天氏我中午看到了1130多章,那我下载最近50章给大家演示下exe的使用吧:
    æ¸é£Pythonå°è¯´ä¸è½½å¨

    怎么样,exe的使用大家还满意吗?赶紧发了文章,吧下载的文本导到手机,接着啃剩下的章节了…
    至于之前发了几次的文章转语音,为什么不用?
    看小说的都知道,其实就图乐子…基本都是一目十行,指望百度API的语音,读到猴年去了。
    另外,其实文本转语音的工具太多了,我平时使用的比较多的就是搜狗搜索和多看阅读。
    导入文本后,直接能生成章节目录,调用讯飞语音的方茴,读起来比百度API的萝莉音舒服很多。
    截几张图给大家看看刚才咱们下载的文本导入效果:
    å¤çå°è¯´

    å¼ èç®å½

    狂拽炫酷叼炸天!哈哈…

    The End

    今天的文章就分享到这里,不知道这波福利大家是否满意呢?
    为了避免不必要的纠纷,公众号内部回复**小说**,即可获取exe的下载地址…
    说明:次工具仅作为Python学习用途,请勿用于其他不正当途径,谢谢。
    OK,今天的内容就到这里,如果觉得有帮助,欢迎将文章或我的微信公众号【清风Python】分享给更多喜欢python的人,谢谢。

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

    HDC.Cloud 华为开发者大会2020 即将于2020年2月11日-12日在深圳举办,是一线开发者学习实践鲲鹏通用计算、昇腾AI计算、数据库、区块链、云原生、5G等ICT开放能力的最佳舞台。

    欢迎报名参会

  • 相关阅读:
    分布式超级账本Hyperledger为什么选择使用kafka引擎实现共识方案
    银行卡所属公司判断 参考自https://blog.csdn.net/well2049/article/details/79429130
    golang GBK与UTF-8互转的例子
    Welcome to Swift (苹果官方Swift文档初译与注解五)---29~34页
    Welcome to Swift (苹果官方Swift文档初译与注解四)---19~28页
    Welcome to Swift (苹果官方Swift文档初译与注解三)---11~18页
    Welcome to Swift (苹果官方Swift文档初译与注解二)---6~10页
    Welcome to Swift (苹果官方Swift文档初译与注解)
    UIButton部分功能设置(一):
    Mac下配置WebDav
  • 原文地址:https://www.cnblogs.com/huaweicloud/p/12016412.html
Copyright © 2011-2022 走看看