原标题:中文编程,用python编写小说网站爬虫

作者:乘风龙王

原文:https://zhuanlan.zhihu.com/p/51309019

为保持源码格式, 转载时使用了截图. 原文中的源码块为文本格式.

我比较喜欢看小说,在网络上看小说一般有2种选择,正版或盗版。正版要钱,盗版要么只能在线阅读,要么下载下来一堆广告。既然学了python就应该写点爬虫练练手,把网络小说爬下来。

本文章需要的python第三方库:

requests(获取网页内容)

BeautifulSoup4(解析网页内容)

本文章需要读者具备python基础知识,并且我不会对文章中所出现的标准库、第三方库的每个类/函数的作用进行解释,请大家自行查阅资料。我不会对代码中的中文命名进行解释。

寻找目标

由于那些著名的小说网站具有很强的版权意识,防盗版措施做得很好,要把小说内容爬下来不是很容易。所以我选择一个盗版小说网站作为爬虫目标。

嗯,全是盗版。

首先编写代码获取文档内容。

打开其中一本小说目录页,记住地址,然后调用 f获取文档 测试代码是否可以运行。

看起来只输出了一半内容,实际上 v文档 已经包含了所有内容,只不过是字符串太长了被print截断而已。

框架

浏览一下小说网站结构,每个小说页面可以分为目录页、正文页。

设计2个接口,分别取名 I小说 和 I章节,I小说 用来提取小说信息和目录,I章节 用来提取章节信息和小说正文。同时定义 I文档,负责从网站上获取文档

提取目录

先查看一下目录页的内容

从图中可以看到,目录最前面有最新章节,目录最后还有重复章节,这些都是需要去除掉的,保留从正文卷开始的章节。

检查网页元素后可知道,目录包含在

元素中,章节链接藏在元素里。然后开始写代码:

提取目录的代码很简单,把上面提到的

找出来,再遍历元素,去除重复项。注意元素的href属性不包含域名,所以创建章节对象时要把地址前面部分加上。

修改一下主函数,运行代码

似乎还有重复章节。我点开一些重复章节看了一下,地址不一样但是内容是一样的,应该是网站录入时出了问题。这个我就不管了。

提取正文

提取完目录后,再看一下正文页。

发现正文最底下有广告链接,这个也要去掉。

分析网页元素,可以知道正文全部包含在

这个元素中,只要把这个元素找出来,取字符串,过滤广告就行了。

修改主函数测试代码是否可用

从运行结果看,爬到的正文有空行有缩进。虽然没有问题,但是小说最终是要放进阅读器里慢慢看的,并不是所有的阅读器都能正确处理空行和缩进,所以还要在代码里对正文进一步处理。

写一个函数叫 f处理正文,负责处理乱七八糟的空行和缩进

然后修改 C章节.fg正文,在返回字符串时做一些处理

return f处理正文(v正文文本)

这样看起来好多了。

保存

确认可以爬到目录和正文之后,接下来就是把正文保存到电脑上。

在实际测试中,网站经常返回503。如果在代码里增加错误重试功能会导致代码变得又臭又长,这里我就不写了。

打开下载下来的文本文件看看。因为网站经常503,只爬了前几章就断掉了,所以没爬完。

结尾

上面的代码可以从一个特定的小说网站下载小说。但是这个网站是盗版小说网站,容易被封掉。或者有各式各样的理由需要从另外一个网站下载小说呢?

由于上面已经写过一些代码了,只需要照葫芦画瓢,重新写个 C小说 和 C章节 就行了。其他什么都不用动。

文章里的代码省略了很多细节,比如HTTP请求头、文档编码处理、异常处理,只保留最重要的爬虫代码。完整代码我发到了github上,见:https://github.com/cflw/cflw_py。

最后请大家以学习研究为目的写爬虫,毕竟爬别人的劳动成果是不好的,请大家多多支持正版。

更多中文编程推广过程内情, 请关注“用中文编程”微信公众号.返回搜狐,查看更多

责任编辑:

python爬虫小说代码示例-中文编程,用python编写小说网站爬虫相关推荐

  1. python爬小说代码_中文编程,用python编写小说网站爬虫

    原标题:中文编程,用python编写小说网站爬虫 作者:乘风龙王 原文:https://zhuanlan.zhihu.com/p/51309019 为保持源码格式, 转载时使用了截图. 原文中的源码块 ...

  2. python简单编程例子-中文方便就用中文编程!Python图形界面开发实例

    原标题:中文方便就用中文编程!Python图形界面开发实例 之前做的一个Python小程序,功能很简单,面对用户群也很窄,是五笔编码编.校人员使用的五笔编码编辑器. 这样的"周末" ...

  3. python如何更新包_python如何更新包 python更新包代码示例

    python如何更新包?本篇文章小编给大家分享一下python更新包代码示例,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Python安装新包,pip是 ...

  4. python编程代码示例_python编程线性回归代码示例

    用python进行线性回归分析非常方便,有现成的库可以使用比如:numpy.linalog.lstsq例子.scipy.stats.linregress例子.pandas.ols例子等. 不过本文使用 ...

  5. 风控Python绘图技法代码示例

    最重要的事情开始都会讲:建模是始终服务于业务的,没有业务的评分卡就没有灵魂 承接风控建模篇第5节,现对各个细节点讲解 绘图元素代码示例 First part 位置决定身材 整体框架的布局 位置设置 画 ...

  6. python入门基础代码图-【01】Python基础入门 (全)

    一.字符串 1. 字符串切片 切片: name="abcdef" name[2:5]="cde" 跳取: name="abcdef" nam ...

  7. python怎么执行代码漏洞_如何使用python查找网站漏洞

    展开全部 如果你的Web应用中存在Python代码注入e69da5e6ba9062616964757a686964616f31333361326363漏洞的话,攻击者就可以利用你的Web应用来向你后台 ...

  8. 全国python一级考试_全国青少年软件编程(python)等级考试试卷(一级)

    下列选项中可以获取Python整数类型帮助的是 A.>>> help(float)B.>>> dir(str)C.>>> help(int)D.& ...

  9. python拼图游戏代码_教你用Python自制拼图小游戏,轻松搞定熊孩子

    摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

最新文章

  1. TCP连接中TIME_WAIT连接过多
  2. ADC和DAC中多通道的含义
  3. POJ 2336 Ferry Loading II 动态规划
  4. 好程序员大数据教程:SparkShell和IDEA中编写Spark程序
  5. Linux下CMake简明教程(四)不同目录下多个源文件
  6. 微信小程序怎么新建php文件,微信小程序中创建小程序页面的步骤介绍(图文)...
  7. 一个程序设计试题:读取2维字符数组,判断出表示的数字
  8. Qt中使用OpenSSL
  9. 小白来学C语言之宏定义(#define)
  10. 物质之学 —— 晶体与非晶体
  11. c#使用SHA256算法实现对文件的加密和解密
  12. Windows 7下IE 11的F12控制台不能使用的解决
  13. 苏宁服务器修复,今天下午苏宁服务器突发宕机,官方回应:因系统升级调整
  14. 获取本地视频url的方法
  15. java山地车 故障,山地车骑行常见的10大问题及解决方案
  16. 使用MATLAB进行多元非线性回归拟合预测
  17. 互联网三大巨头依靠什么武器对垒O2O?
  18. 成都短期计算机python培训
  19. 面试官:你说你懂i++跟++i的区别,那你会做下面这道题吗?
  20. LocalDateTime 存入数据库少8个小时

热门文章

  1. jboss jta mysql_JBoss平台下JTA与JMS实验软件架构8
  2. python代码规范 自动优化工具Black
  3. HTTP metadata数据
  4. pyhton 去除字典空值
  5. jquery的常用API汇总
  6. umi搭建react+antd项目(四)axios请求数据
  7. 给HttpClient添加请求头(HttpClientFactory)
  8. dockerfile各种命令解析
  9. IOS响应式编程框架ReactiveCocoa(RAC)使用示例
  10. .Net高级技术——程序集