前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python | 一次下完所有小说,还有谁!

Python | 一次下完所有小说,还有谁!

作者头像
用户1634449
发布2018-12-14 15:26:41
4960
发布2018-12-14 15:26:41
举报
文章被收录于专栏:Python专栏Python专栏

作者:Josiah

来源:http://www.cnblogs.com/Josiah-Lin/p/7241678.html

1.目标

排行榜的地址: http://www.qu.la/paihangbang/

找到各类排行旁的的每一部小说的名字,和在该网站的链接。

2.观察页的结构

很容易就能发现,每一个分类都是包裹在:

之中,

这种条理清晰的网站,大大方便了爬虫的编写。

在当前页面找到所有小说的连接,并保存在列表即可。

3.列表去重的小技巧

就算是不同类别的小说,也是会重复出现在排行榜的。

这样无形之间就会浪费很多资源,尤其是在面对爬大量网页的时候。

这里只要一行代码就能解决:

这里调用了一个list的构造函数set:这样就能保证列表里没有重复的元素了。

4.代码实现

模块化,函数式编程是一个非常好的习惯,坚持把每一个独立的功能都写成函数,这样会使代码简单又可复用。

  • 网页抓取头
  • 获取排行榜小说及其链接: 爬取每一类型小说排行榜,按顺序写入文件。文件内容为:小说名字+小说链接。将内容保存到列表,并且返回一个装满url链接的列表
  • 获取单本小说的所有章节链接:
代码语言:javascript
复制
获取该小说每个章节的url地址,并创建小说文件
  • 获取单页文章的内容并保存到本地 这里有个小技巧: 从网上爬下来的文件很多时候都是带着<br>之类的格式化标签,可以通过一个简单的方法把它过滤掉: html = get_html(url).replace('<br/>', '\n') 这里单单过滤了一种标签,并将其替换成‘\n’用于文章的换行,
  • 主函数
  • 输出结果
5.缺点

本次爬虫写的这么顺利,更多的是因为爬的网站是没有反爬虫技术,以及文章分类清晰,结构优美。

但是,按照这篇文的思路去爬取小说,大概计算了一下:一篇文章需要:0.5s,一本小说(1000张左右):8.5分钟,全部排行榜(60本): 8.5小时!

那么,这种单线程的爬虫,速度如何能提高呢?

自己写个多线程模块?

其实还有更好的方式: Scrapy框架

后面可将这里的代码重构一边遍,速度会几十倍甚至几百倍的提高了!这其实也是多线程的威力!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python专栏 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5.缺点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档