码迷,mamicode.com
首页 > 其他好文 > 详细

对于爬虫的一些想法

时间:2018-09-15 01:19:26      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:实现   也有   邮件系   消息   任务   流程   解耦   nas   基于   

工作这么久以来。遇到过了好几个爬虫项目,抓过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 更新于杭州

  

对于爬虫的一些想法

标签:实现   也有   邮件系   消息   任务   流程   解耦   nas   基于   

原文地址:https://www.cnblogs.com/LazyCout/p/9649607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!