在上一篇我们写了一个爬虫脚本,这个脚本可以通过用户的 uid爬取对应用户的所有文章的信息并保存到本地。
既然我们已经可以爬取单个用户的所有文章了,那我们就想,是否能够爬取更多用户的文章信息?
比如说我们定个小目标:爬取所有简书用户的文章信息。
这个小目标好像有点难度,那我们再定一个小小目标,先爬他个一万篇文章的信息。
这样看起来就简单多了,等我们爬到了一万篇文章信息,再爬十万、一百万、一 … ..、最后就是简书所有的文章了,嘿嘿嘿( •̀ ω •́ )y。
既然已经确定了目标,那么就让我们行动起来。
项目文章,想看结果的可以点下面链接:
一:实战:爬取简书之搭建程序框架
一、爬取思路
磨刀不误砍柴工,在敲代码之前让我们先来讨论一下应该怎么爬取。
清晰的思路往往可以使我们的劳动达到事半功倍的效果。
第一个问题:如何获取用户 uid
我们知道,每个用户都会关注一些其他的用户,而这些被关注的用户也有自己关注的用户,这样一直循环。
所以我们的爬虫思路就是,先找一批关注数量较多的用户,以这些用户为起点,爬取他们所关注的用户。
这样我们就获得了第一批的用户 uid,然后在第一批用户的基础上再爬取第一批用户的关注,这样我们就获得了第二批用户,如此往复,只要时间够长,我们就能够获取简书绝大部分的用户 uid。
第二个问题:如何获取用户文章信息
这个问题我们已经在上一篇讲过了,不知道的可以取看看
python爬虫系列之数据存储实战:爬取简书用户文章列表并保存
第三个问题:如何保存数据
对于较大的数据量,数据库肯定是第一选择。但是我们还没讲过如何使用数据库,所以只好用 csv了。
那为什么不用 json呢?原因我们在上一篇讲过,json不能逐条保存数据,而我们要爬取的数据量又比较大,不能全保存在缓存里等到最后再写入,所以就只能用 csv了。
二、程序结构
请求模块
接受一个 url,返回 url对应网页的 xpath对象
需求:
- 能随机切换 user-agent
- 可以设置代理
- 能对返回结果进行一定的预处理
uid 解析模块
解析用户 uid
需求:
- 能够自动去除已爬取过的 uid
- 可以不断返回 uid–>生成器
数据爬取模块
接受一个 uid作为参数,返回 uid对应用户的所有文章信息
需求:
- 返回信息为字典格式
- 自动判断是否爬取结束
数据保存模块
接受一个字典的列表,将数据保存到对应的文件中
需求:
- 将字典格式的数据保存到文件中
断点续爬
在出现意外情况后能够从上次中断的地方继续爬取
需求:
- 断点续爬
以上就是程序的大体框架和功能,细节部分后面我们慢慢完善。
如果你有什么想法,欢迎评论留言一起参与这个项目。
项目的源代码会发布在 GitHub上,下一篇我们先把程序的框架完成。
觉得写的不错?点赞、评论、关注三连来一套(。^^)