爬虫项目中,网络不稳定的情况下,怎样保证采集信息的完整性

ajax动态页面上的内容要确保抓取完整,得监听DOM上的各种事件,HtmlUnit是否可以我没有用过,我都只直接用Python驱动chrome或者Firefox,对于高性能场景,我是直接在浏览器内核上做爬虫,用C++。相当于一个机器人程序,在那里实时监视各种变化。
还有一个处理起来比较麻烦的问题,要投入太多力量,所以我一直没有找到更优的方案,就是ajax网页上有大量动态过程,用于网络不稳定,个别http消息或者js执行失败了,此后会影响后续的操作,比如,往下翻页的按钮失效了,又如,10条消息只显示出来5条。这种问题有什么好的处理方案也可以一起探讨一下

■网友
【爬虫项目中,网络不稳定的情况下,怎样保证采集信息的完整性】 爬虫的时候,网络不稳定属于其中一种影响较大的因素之一,因此八爪鱼采集器推出了云采集功能,用户无需担心自己的网络波动,任务都是在我司服务器上运行的,以实现用户的采集规则可以24小时不间断一直采集直至采集完数据才停止,规则里可以设置Ajax延时,当网页一直没法完全加载完而咱们要采集的数据已经加载完成的的时候,便可停止页面加载直接提取所要数据即可。
八爪鱼下载链接:https://www.bazhuayu.com/download?utm_campaign=zhihu\u0026amp;utm_medium=question41799626

■网友
先回答一下你的问题1. 你的意思是使用htmlunit 时网页加载不完整,这个判断比较简单,每一个ajax请求都是独立的并且会在拿到数据时全部显示,而不是部分,所以并不是很理解你指出的不完整的原因,如果只是页面异步加载,并且只有一个请求,直接判断DOM节点里面的内容即可(这一点看到你用的是正则所以比较难,后面给出方案)有内容就视为成功,反之为失败2. 存储数据方面,一定是文档型数据库更加适合。例如mongodb,因为爬虫场景得到的结果往往会有较大差异(特别是来自不同的source)文档型数据库允许你的每一个文档都存在差异。至于数据量的大小影响确实比较大,存储自然都不是问题,重点在于你的查询场景是什么?是以范围查找居多还是精确查找居多?是需要根据需求来做一些优化的。回答完了你的问题,说说我的建议。那就是放弃你目前的方案,你的目的无非是从若干个网站获取若干页面的若干条数据并存储。1. 你不需要类似htmlunit 以及其他答案里面提到的各种有头或者无头浏览器方案,这种方案是普适地,既然是普适的一定会有妥协,第一个妥协一定是时间成本很高。以巨慢的速度来下载各种js脚本来执行然后再渲染,有时候甚至还要下载图片。第二个妥协是数据准确性低。因为由于下载和执行的文件太多而降低抓取的成功率。之所以其他答案中会提到很多这样的方案是因为他们做的是通用爬虫软件,而你并不需要作出这样的妥协。2. 你在提取数据的时候不要使用正则这样吃力不讨好的方式,正则的好处当然是速度快,但是对于从网页这样的树型结构中提取内容是非常不友好的。可以改用xpath或jquery选择器等方法如果你用nodejs或者愿意使用nodejs,有个现成的框架,前提是你得自己分析出ajax请求的套路,那么这个框架的并发控制,重试次数,编码转换,jquery选择器,超时控制等特性会让你轻而易举搞定你的项目。戳https://github.com/bda-research/node-crawler
■网友
爬虫项目中,网络不稳定的情况下,怎样保证采集信息的完整性

HtmlUnit – Frequently Asked Questions
■网友
谢邀最近在用java做爬虫,对于js加载的页面同样是向后台发送请求(ajax),所以可以不使用网页测试工具,而直接抓包分析http请求再自行模拟http请求,分析获得的数据(json),个人认为这样也就解决了你的第二个问题,可以通过http的状态码,或者对获得的数据的分析来判断请求是否成功,是否需要重新发送请求。通过这种方式,我解决了的更多按钮,还有对高分答案的收藏。


推荐阅读