从接触爬虫到现在也有一年半了,在这里总结一下一个新人入门爬虫需要了解的种种。作为实用向入门教程,我不会讲太多细枝末节的东西。最重要的就是能爬到东西不是吗?
那好,作为一个爬虫新人,要爬一个网站时,应该怎么开始呢?
首先,确定要爬的内容。是要整个网站的所有内容还是只是部分?需要的爬取的数据在网页源代码里有吗(涉及到模拟js发送请求)?需要的爬取的数据在网页上有吗(要用API爬吗)?确定要爬的内容之后,紧接着就需要考虑如下问题。
1.API爬虫和网页爬虫?
嗯,我一般习惯把爬虫分为API爬虫和网页爬虫。首先简要介绍一下两种爬虫:
API爬虫:
- 某些网站(一般是比较大的网站)会提供API接口供开发者调用,然后我们这些可恶的“数据小偷”(笑) 就可以通过调用这些API来获取想要的数据。所谓网站API,通俗来说就是一个url。带上身份验证数据和一些参数,访问这个url,即可获得想要的数据。通常,网站在提供API的同时也会提供实现好的类库供我们使用,帮助我们摆脱烦人的http请求操作。
网页爬虫:
- 模拟浏览器的行为访问网页,并从获得的页面的源代码中解析出需要的数据。
那么,我们应该写哪种爬虫呢?选用哪种爬虫取决于你想要爬的东西。
- 如果要爬的是整个网站的话,别无选择,那就选网页爬虫。
- 否则,就是爬部分网页数据了(比如用户数据等)。如果要爬的网站提供API调用的话,那肯定首先API爬虫了,因为调用API或者类库比手写网页爬虫通常更简单:)。如果网站不提供API或者要爬的数据API中没有,那么就只好选网页爬虫了。
2.爬下来的数据怎么存,存在哪?
急着去写爬虫之前,让我们先好好考虑数据存放的问题。
首先,是存数据库还是文件里?一般来说建议存数据库中,便于之后的更新和查找。如果真的数据量比较小或者之后很少有更新和查找的话,那也可以存在文件中(毕竟代码写起来比较简单)。
如果存在数据库中,那么选哪种数据库?这个就跟爬下来的数据相关啦。可以选择通用的MySql,也可以选择与网络数据高度契合的Mongodb。要是爬的是社交网络的话,还可以选择图形数据库,比如Neo4j,Orientdb,Arangodb等。但是图形数据库其较慢的插入速度实在是不适用于实时存储爬虫数据,只推荐在之后做数据分析时使用。 关于图形数据库的插入速度我在之前的一篇博文中提过,有兴趣的可以看看Neo4j安装&入门&一些优缺点。
3.爬虫该怎么写
现在,我们可以坐下来开始爬虫程序的编写了。考虑到“实用向”三个字,我将通过两个例子来展示基本的爬虫程序怎么写。
3.1 API爬虫
3.2 网页爬虫
4.如何提高爬取的速度
在写完能跑的爬虫后,这是最让人在意的问题了。
对于API爬虫的话,只需要申请更多的应用,提高API的可调用次数即可。而对于网页爬虫的话,因为涉及到待爬队列的共享问题,不能只是简单地多开爬虫,可能要考虑分布式的爬取方案了,如scrapy-redis。
最后,祝爬虫愉快:)。