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多线程编程(一):threading模块综述
Apr 05 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
python迭代dict的key和value的方法
Jul 06 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
Python可变和不可变、类的私有属性实例分析
May 31 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
Python更新所有已安装包的操作
Feb 13 Python
python实现逻辑回归的示例
Oct 09 Python
python爬虫selenium模块详解
Mar 30 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
php魔术变量用法实例详解
2014/11/13 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
Python地图绘制实操详解
2019/03/04 Python
详解Python 函数如何重载?
2019/04/23 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
打架检讨书400字
2014/01/17 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
初中化学教学反思
2014/01/23 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
安全生产目标责任书
2014/04/14 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
鼓舞士气的口号
2014/06/16 职场文书
电气自动化求职信
2014/06/24 职场文书
学校教师安全责任书
2014/07/23 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
督导岗位职责
2015/02/04 职场文书
大学生暑假实习总结
2015/07/13 职场文书
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python