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函数的参数的默认值所引发的问题的原因
Mar 30 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
一篇文章快速了解Python的GIL
Jan 12 Python
linux下python使用sendmail发送邮件
May 22 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
python实现ip代理池功能示例
Jul 05 Python
python django model联合主键的例子
Aug 06 Python
Django中的cookie和session
Aug 27 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
Python图像处理二值化方法实例汇总
Jul 24 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
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
python+django加载静态网页模板解析
2017/12/12 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python中单下划线_的常见用法总结
2018/07/10 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
建国大业电影观后感
2015/06/01 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
python实现MD5进行文件去重的示例代码
2021/07/09 Python
MySQL日期时间函数知识汇总
2022/03/17 MySQL