在上一家公司写了一年的爬虫,这里做个总结。
爬虫主要包含采集模块,解析模块,存储模块还有清洗模块。有些抓取整个网页的爬虫可能没有清洗模块,但解析模块是一定会有的,因为需要对网页解析提取出有用的url,放到url列表中。
采集模块主要功能是访问url网页,下载网页,然后交给解析模块,进行解析,提取其中符合条件的url,如果要在线清洗,还需要调用清洗模块,提取网页中特定的数据,最后将结果交给存储模块,存储模块类似一个输出组件,可以将数据存入到数据库,写入集群,直接生成文件等。
一些网站不愿意爬虫访问,所以设定了反爬机制,这个时候,我们就要在代码里添加反反爬代码。常见的反反爬方法有:
1)cookie,主要针对需要登录账号的反爬机制,可以准备一个池子,访问时随机从中选取一个,避免总是用一个账号用久了被拉入黑名单
2)代理IP,主要针对有访问次数限制的反爬机制,不过免费的代理IP(有网站提供)基本上用不了几个,买的也不怎样
3)动态拨号VPS,超级大杀器。
4)控制访问频率,加个sleep n(随机生成)的机制,与对方程序员合作愉快!
常用的解析手段有正则表达式、Beautiful Soup和Lxml,个人常用的lxml,的确很方便。工作中也遇到过不规则的网页,往往用正则表达式和编写特定的解析代码。
另外,有些网页,在你用F12调试模式查看的时候,发现有数据,但是爬虫爬下来的数据中却没有该部分,这个往往是由js调用生成。
为了避免爬取相同的网页,爬虫还包含URL过滤机制。实现起来,如果预估也就几千,几万个网页,可以直接在爬虫中用python 字典来管理url,如果网页数较多,可以使用数据库缓存,将已经爬取的网页URL存到缓存中,在爬取下一个网页之前,先比对URL,只在缓存中没有该URL才继续爬取。