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发送SMTP邮件的教程
Apr 29 Python
Python爬取网易云音乐上评论火爆的歌曲
Jan 19 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
Mar 12 Python
详解python中的json和字典dict
Jun 22 Python
python爬虫获取新浪新闻教学
Dec 23 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
简单了解Python读取大文件代码实例
Dec 18 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
Apr 24 Python
python能开发游戏吗
Jun 11 Python
Django展示可视化图表的多种方式
Apr 08 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中使用Oracle数据库(4)
2006/10/09 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
Python实现线程池代码分享
2015/06/21 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
django 读取图片到页面实例
2020/03/27 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
python中的插入排序的简单用法
2021/01/19 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
蔬菜基地的创业计划书
2014/01/06 职场文书
好军嫂事迹材料
2014/01/15 职场文书
装修致歉信
2014/01/15 职场文书
单身联谊活动方案
2014/01/29 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
MySQL学习必备条件查询数据
2022/03/25 MySQL