对于爬虫的一些想法
Posted lazycout
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于爬虫的一些想法相关的知识,希望对你有一定的参考价值。
工作这么久以来。遇到过了好几个爬虫项目,抓过NASA的卫星数据,抓取头条的新闻数据,最近抓了一个母婴网站的产品数据,马上接下来的任务,就是抓取电商网站的数码产品。
现在针对做过的项目,对自己在工作中遇到的问题,做一个梳理,记录一下自己的想法。
1,现在网上的爬虫教程很多都是教你怎么去爬取某个页面,某个网站,其实这些都只是怎么实现。一般都是模拟浏览器请求,加入请求头,然后得到的html或者接口返回的json数据,对返回值进行解析,并做数据库持久化。
这些也是爬虫的核心流程(在知乎上,也有人利用webkit去爬取数据,到目前也没有去做过,之前曾经用C#基于webkit做过一个简单的浏览器客户端)
2,基于爬虫的核心流程,我们怎么去做一个稳定、健壮的爬虫项目呢?
在我目前觉得,有以下几个模块需要(如果有更多的,将可能继续更新)。
(1)日志系统,我们需要对系统的运行情况,做一个充分的了解,日志系统是必不可少。
而日志系统,可以分成几个细的模块,对你爬取的信息要有记录,比如,系统正在爬取的网页,是否爬取成功,爬取的用时,这里记录的是爬虫的工作情况;我们还需要系统的报错信息。
(2)因为抓取的数据在网上,网络可能会不稳定,我们要做一个抓取失败重新抓取的小功能,也许还会抓取不成功,这个时候,我们就需要采取另外的办法(现在的 java 中的消息队列,以RocketMQ为例,会对未发送成功的消息,进行循环发送)
现在,我觉得这个未抓取成功的链接可以做持久化,存入数据库,mysql,也可以暂时存如Redis中。
(3)针对上面可能会出现的情况,我目前的想法就是。把抓取的链接存入MySQL的表中(表里面的表结构,大概有要爬取的链接,是否爬取过,是否爬取成功,以及爬取的次数)。我们也没那个必要一上来,拿到数据立马就去抓取数据,再去抓取链接里面的二级链接。爬虫系统运行过程中,我们成功抓到一级链接里面的内容之后,我们就开始抓取二级链接,(一般情况,我们要到数据,一级链接获得是列表数据,二级链接是详细数据,在这里,我们可以再表结构对一字段,父级id,这样我们就可以得到一级链接的一棵树)。
(4)我们可以在爬虫系统中,建立邮件的报错信息推送,考虑邮件,是因为邮件系统的推送免费,短信系统还是要钱的。你可以在系统设置一些信息,当出现严重的错误的时候,可以及时收到错误信息,这时候,赶快去查bug把。
(5)上面的描述,总结一下,就是为了在未知条件下,尽可能的抓取数据,保证系统的运行,提升代码的健壮性,日志信息尽可能让你去了解系统的运行情况,邮件模块,让你更方便的排查问题。
(6)了解了前面的情况,我们就可以升一级,想一想,分布式爬虫系统怎么做?目前我的想法,就是链接提取集群,网页解析集群,用消息队列实现解耦。。而数据库的主从,容灾,持久化,集群内的消息去重,这些都要考虑的。这些也是目前我正在学习的方向。
以上,大概就是目前我的一些想法,如果有更好的解决方案,再更新吧。如果,你有更好的解决方案,也可以找我交流,大家一起学习进步。
2018-09-15 00:00:11 更新于杭州
以上是关于对于爬虫的一些想法的主要内容,如果未能解决你的问题,请参考以下文章