侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python下载网络小说实例代码

Python  /  管理员 发布于 7年前   202

看网络小说一般会攒上一波,然后导入Kindle里面去看,但是攒的多了,机械的Ctrl+C和Ctrl+V实在是OUT,所以就出现了此文。

其实Python我也是小白,用它的目的主要是它强大文本处理能力和网络支持,以及许多好用的库,不需要自己造轮子。而且真心比C方便啊(真是用了才知道)

分析要获取的网页

我要获取的主要是3个东西:

  • 文章的标题。<div id="title">正文 第一章 北灵院</div>
  • 文章正文内容。<divstyle="line-height: 150%; color: rgb(0, 0, 0);">
  • 下一章的URL。<a href="https:/article/11455541.html" rel="external nofollow" >下一页</a>

还有就是注意网页的编码,这个网页的编码是GBK,但在实际运行过程中,我用GBK会出现网页解码错误:

UnicodeDecodeError: ‘gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence

所以换用了gb18030,问题就解决了,因为一般修仙网络小说中,会出现各种王霸之气的文字,你们懂得,所以需要更加牛逼文字库,你们感受一下博大精深的字符编码。

源代码

我就知道,大家要这个,哈哈哈。

主函数

#主函数if __name__ == '__main__':  global numChapter  global NOVERL  NOVERL = '大主宰.txt'  #NOVERL = '择天记.txt'  NOVERL = '武动乾坤.txt'  if(NOVERL == '大主宰.txt'):    textStartURL = 'http://www.bxwx8.org/b/62/62724/11455540.html';#大主宰第一章的URL    textStartURL = 'http://www.bxwx8.org/b/62/62724/28019405.html';#第一千两百三十七章 鬼大师  else:      textStartURL = 'http://www.bxwx8.org/b/98/98289/17069215.html';#择天记第一章URL    textStartURL = 'http://www.bxwx8.org/b/98/98289/28088874.html';#择天记第七十八章 合剑术    textStartURL = 'http://www.bxwx8.org/b/35/35282/5839471.html';#武动乾坤第一章    #textStartURL = 'http://www.bxwx8.org/b/35/35282/7620539.html';#武动乾坤  nextURL = textStartURL;  isEnd = False  f = open(NOVERL, 'w', encoding='utf-8')    f.close()  numChapter = 0;  while(not isEnd):    nextURL,isEnd = findNextTextURL(nextURL)  print('end of capture!')  print('获取到 ' + str(numChapter) + ' 章')

获取内容和下一章URL

#找到 下一章节的URL#获取小说内容def findNextTextURL(url):  global numChapter  global NOVERL  #如果nextURL == endURL 则返回false  if(NOVERL == '大主宰.txt'):    endURL = 'http://www.bxwx8.org/b/62/62724/index.html'#大主宰    headURL = 'http://www.bxwx8.org/b/62/62724/'#大主宰  else:      endURL = 'http://www.bxwx8.org/b/98/98289/index.html'#择天记    headURL = 'http://www.bxwx8.org/b/98/98289/'#择天记    endURL = 'http://www.bxwx8.org/b/35/35282/index.html'#武动乾坤    headURL = 'http://www.bxwx8.org/b/35/35282/'#武动乾坤  isEnd = False   resp   = urllib.request.urlopen(url)  #处理的字符的确是gbk的,但是其中夹杂的部分特殊字符,  #是gbk编码中所没有的如果有些特殊字符是GB18030中有的,但是是gbk中没有的。  #则用gbk去解码,去所不支持的字符,也比如会出错。  #所以,此种情况,可以尝试用和当前编码(gbk)所兼容的但所包含字符更多的编码(gb18030)去解码,或许就可以了。  #allHtml = resp.read().decode('gbk')#  allHtml = resp.read().decode('gb18030')#  textSoup = BeautifulSoup(allHtml)  #章节名  strChapter = textSoup.find(id='title').getText().split(r'【')[0]  strChapter = strChapter.split(r'(')[0]  strChapter = strChapter.replace('正文 ','') + '\n'  numChapter = numChapter + 1  strID = '#' + str(numChapter) + '-'  strChapter = strID + strChapter  strChapter = strChapter + '\n------------------------------\n' + url + '\n------------------------------\n'  #小说正文  strNovel = textSoup.find(id='content').getText()  strNovel = strNovel.replace('  ','\n')  #除去正文中多余的第XXX章  strMatch = r"第[\u4e00-\u9fa5]+章"  list2replace = re.findall(strMatch, strNovel)  if list2replace:    str2replace = list2replace[0]    strNovel = strNovel.replace(str2replace, '')  #合并章节和正文  strNovel = strChapter + strNovel + '\n------------------------------\n------------------------------\n'  #写到txt文件中  write2TXT(strNovel)  #获取下一个章节的URL  nextURL = re.findall(r'var next_page = "[\w]+.html"', allHtml)[0]  nextURL = nextURL.replace(r'"', '')  nextURL = nextURL.replace(r'var next_page = ', '')  nextURL = headURL + nextURL  print(numChapter)#章节数  print(strChapter)#章节名字  print((nextURL))#下一章URL  if(endURL == nextURL):    isEnd = True  return nextURL,isEnd

写入TXT

#写到文本文件中def write2TXT(txt):  global NOVERL  f = open(NOVERL, 'a', encoding='utf-8')  f.write(txt + '\n\n')  f.close()

结束语

三个说明:

  • txt文本的编排肯定不好,而且在Kindle里面无法自动分章,多看阅读可以,原生系统就GG了,所以下一步可以用epubBuilder这款软件进行二次编排,输出mobi导入你的Kindle。
  • 本程序只是针对这个网站而已,但是如果网站换了,细节性代码就得重新写了。不过大框架还可以用。
  • 网络小说毒害有志青年,一入网文深是海,从此节操是路人,诸君且行且珍惜!

总结

以上就是本文关于Python下载网络小说实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


  • 上一条:
    Python断言assert的用法代码解析
    下一条:
    python验证码识别实例代码
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客