Python下载网络小说实例代码


Posted in Python onFebruary 03, 2018

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

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

分析要获取的网页

Python下载网络小说实例代码

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

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

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

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

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

Python下载网络小说实例代码

源代码

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

主函数

#主函数
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 相关文章推荐
极简的Python入门指引
Apr 01 Python
使用Python神器对付12306变态验证码
Jan 05 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
Python RabbitMQ消息队列实现rpc
May 30 Python
django1.11.1 models 数据库同步方法
May 30 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
python生成器推导式用法简单示例
Oct 08 Python
python 读取数据库并绘图的实例
Dec 03 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
python计算导数并绘图的实例
Feb 29 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
JS设计模式之责任链模式实例详解
Feb 03 #Python
numpy使用技巧之数组过滤实例代码
Feb 03 #Python
python验证码识别实例代码
Feb 03 #Python
Django中cookie的基本使用方法示例
Feb 03 #Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 #Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 #Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 #Python
You might like
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
php无限遍历目录示例
2014/02/21 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
javascript history对象详解
2017/02/09 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
总结python爬虫抓站的实用技巧
2016/08/09 Python
python 循环while和for in简单实例
2016/08/16 Python
Flask之请求钩子的实现
2018/12/23 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
回门宴新郎答谢词
2014/01/12 职场文书
经典毕业生求职信
2014/07/12 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
入党介绍人考察意见
2015/06/01 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
你需要掌握的20个Python常用技巧
2022/02/28 Python
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
实战Python爬虫爬取酷我音乐
2022/04/11 Python