社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python这么厉害的么?一次爬完整站小说

Python学习交流 • 5 年前 • 598 次点击  

1.目标

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

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

2.观察页的结构

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

之中,

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

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

3.列表去重的小技巧

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

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

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

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

4.代码实现

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

网页抓取头

获取排行榜小说及其链接:

爬取每一类型小说排行榜,按顺序写入文件。文件内容为:小说名字+小说链接。将内容保存到列表,并且返回一个装满url链接的列表

获取单本小说的所有章节链接:

获取该小说每个章节的url地址,并创建小说文件

获取单页文章的内容并保存到本地

这里有个小技巧:

从网上爬下来的文件很多时候都是带着
之类的格式化标签,可以通过一个简单的方法把它过滤掉:

html = get_html(url).replace('
', '\n')

这里单单过滤了一种标签,并将其替换成‘\n’用于文章的换行,

主函数

输出结果

5.缺点

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

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

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

自己写个多线程模块?

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



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/IyJfUHuUzL
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/27899
 
598 次点击