0x00 前言
上一篇文章已经写了一部分数据获取和爬虫的内容,这篇文章我们一起来实现一个网络爬虫,用这个小爬虫来爬取500w的简书的粉丝关系对。
1. 两个小问题
为什么要爬关系对数据呢,爬些文字数据岂不更好?
为什么要爬关系对数据?因为居士最近正在搞和社交关系相关的项目,需要对大量的关系数据做处理,而且要用到 LPA 、 PageRank 这些算法,写博客本来就需要为自己学习和工作来服务,为了加深自己的理解,因此前几篇博客都和关系数据相关。后续当需要文本数据的时候,会有专门的文章。
为什么要爬简书数据呢?
为什么爬简书的数据?这就和我们爬虫的实现有关了,比较成熟的网站都有很强的防爬虫措施,比如xx百科,很容易被封IP。但是像简书和CxxN这些网站的防爬虫相对做的比较弱,比较容易下手。
2. 通过本文能收获什么?
- 你将能了解到如何针对特定网站也设计一个爬虫,设计思路很重要。我们会主要来讲怎么设计,实现的代码很简单,大致过一下,不一行行讲了,都有详细注释。
- 你会了解到爬虫的几个工程要点和一种简单的实现方法:图的BFS,页面的解析和已爬取URL列表的维护。
- 完整能运行的代码,有需要的话爬好的数据也可以拿走。
0x01 设计一个小爬虫
1. 明确目标
先明确一下目标:我们要爬取简书中的的关注数据,比如A关注B,那我们就存下来B A
这样一条数据,即人+粉丝
,以Tab分割。
2. 总结规则
下图,是我们想要爬取数据的主要页面,我们希望从这个页面得到这样一份数据:
dantezhao 小飞_b7ef
dantezhao Daisy向阳花儿
dantezhao Maxine24w
dantezhao Jialin28
接着,我们需要看一下它返回给浏览器的 HTML 的source code什么样子,然后从中来解析出来这个关系对。在Chrome中直接在当前网页下按 ctrl+u
即可。
从下图中,我们可以看到,只要拿到红框圈住的部分就可以了。仔细看一下,红框圈住的部分包含两块内容:<a class="name" href="/u/9e2b3667983d">
和用户名
。 这两块内容我们都需要,特别是前面的那串奇怪的字符,属于上一篇文章《No.1 聊一聊数据获取和爬虫》中提到的URL解析。能把这个解析出来,我们就能不停地获取新的网页链接,爬取内容。