简单易懂爬虫入门,从一个论坛爬起。[play with python]第1.2期

简单易懂爬虫入门,从一个论坛爬起。[play with python]第1.2期

2 年前 · 来自专栏 Play with Python

本期讲一下爬虫,以及如何构建一个简单的爬虫来爬mobile01论坛的数据


开篇先贴一段维基百科: 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。[1]

百科的更多内容就不贴了,有兴趣的同学可以自己去查。爬虫这个名字就很形象,网页和网页之间构成了错综复杂蜘蛛网一般的连接,而爬虫则是在网上穿梭的蜘蛛(spider)。

互联网的爬虫无处不在,春节期间频频亮相朋友圈的抢票软件、微博大v留言区里整齐划一的僵尸粉、什么值得买购买就返利、百度google返回的搜索结果...背后都有爬虫在默默运作。

爬虫的流量甚至构成了网络流量的主要部分。根据imperva的报告Bad Bot Report 2020[2],恶意爬虫流量就占据了互联网流量的24.1%,如果算上搜索引擎的爬虫,比例会更高,甚至超过50%[3]。


imperva 2016年的网络流量报告


也许你认为的爬虫是这样的



但实际上的爬虫是这样的(密恐患者请跳过)



说了一通爬虫的介绍,回到主题。

mobile01论坛[4]是台湾的一个活跃度很高的论坛,类似于贴吧,里面的帖子真实的反映了台湾网民的所思所想,帖子、留言数据更是值得收集的繁体中文NLP的珍贵语料,我之前的文章 mobile01论坛舆情分析之一:如果有数据的话就先探索一下吧。[play with python]第1.1期 也用到了这一批数据,而收集它们,就用上爬虫了。

构建一个爬虫,需要几步?形象的说,可以把爬虫看做一个浏览网页的机器人,它所做的事情,无外乎:打开网页,把网页上它感兴趣的数据保存下来,打开下一个网页。就这么简单。

徒手构建一个爬取mobile01论坛的爬虫,只需要做:

1、请求器:负责请求网页内容,并将请求结果发送给解析器

2、解析器:解析网页内容,得到感兴趣的数据,保存数据和/或发送url给调度器

3、调度器:组织哪些url需要爬取并分配给请求器 功能示意如下(渣绘图)




通过观察论坛的组织规则,分为列表页和正文页,通过请求和解析列表页可以得到帖子正文的url,然后请求正文页并解析获得帖子留言数据。



例如,通过解析以上页面,可以得到下图的数据。



代码部分就不放了,有兴趣的同学可以参考 github repo ,写一个爬虫就是这么简单。

当然,徒手写爬虫对于小需求尚可以满足,毕竟不用考虑调度、分布式等问题,但应付大规模的爬虫需求,就显得捉襟见肘。

这里隆重推荐一个爬虫框架:Scrapy[5]。好用。


最后提醒一下,如果要自己写爬虫,注意法律风险哦。


小伙子写了一个爬虫,亲手把自己送进了监狱
爬虫玩的好,监狱进的早?
因为爬虫,我的老板进监狱了
爬虫究竟是合法还是违法的?


[手动狗头]


欢迎关注本人公众号,探索生活中的 Python 应用。

系列预告

[play with python]系列文章将写生活中一些python的小应用,主题大概包括数据分析、自然语言处理、任务自动化等,争取周更,欢迎关注。

相关文章

References

[1] 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。: zh.wikipedia.org/wiki/%
[2] Bad Bot Report 2020: imperva.com/blog/bad-bo
[3] 甚至超过50%: imperva.com/blog/bot-tr
[4] mobile01论坛: mobile01.com/
[5] Scrapy: scrapy.org/

发布于 2020-05-05 00:46

文章被以下专栏收录

    Play with Python

    Play with Python

    用Python做一些有趣的事情