您的位置:首页 >新闻资讯 > 正文

用代理IP开展爬虫 抓取频次与策略如何制定?

来源:互联网 作者:admin 时间:2019-09-11 15:41:33

  有了代理IP工具的帮忙,爬虫被封少了,工作开展起来是轻松了,但也并不完全把问题全都一并解决。毕竟爬虫是有一定复杂性的,根据爬取的不同网页类型,会出现不同的情况,这就需要我们去制定好爬虫的策略以及合适的抓取频次。


用代理IP开展爬虫 抓取频次与策略如何制定


  网页的不同情况有哪些?


  1、抓取的网页量很大,网页更新量也很大,一般的网站,比如新闻,电子商务网站,页面基本是实时更新的。


  2、大部分的网页都是动态的,多媒体,或者封闭的(facebook),现在的网页大都有JS和AJAX,抓取已经不是简单的执行wget下载,现代的网页结构需要我们的爬虫更 加智能,需要更灵活的应对网页的各种情况。


  因此,对一个通用的爬虫,我们要做好相应准备。


  1、更新策略:监控列表页来发现新的页面;定期check页面是否过期等等


  Freshness:表示抓取到的网页是否已经被修改


  Age:表示抓取的网页过期的时间


  对于更新来说,目标是让平均age时间越小,freshness越高;一般的更新策略有两种:定期批量更新和按更新周期更新;定期批量更新指对一批 URL,按照失效时间定期去刷新,按周期更新指的是按照页面更新变化频率而修正是更新频率,一般来说,更新越频繁的网页更新也就越快。


  2、抽取策略:我们应该如何的从网页中抽取我们想要的内容,不仅仅包含最终的目标内容,还有下一步要抓取的url。


  XPATH是一个简单直观,但是很有效的一个方案,XPATH能精准的定位网页的任意一个位置,意味着我们可以很精准的抽取页面上的任意位置,当面临很多网站的时候,当然配置XPATH就是一个很艰巨的任务,也许存在一个自适应的XPATH识别的方法。


  JS和AJAX


  在java下面,HtmlUnit是一个不错的 解决方案,HtmlUnit是Junit 的扩展测试框架之一,该框架模拟浏览器的行为,开发者可以使用其提供的API对页面的元素进行操作,套用官方网站的话HtmlUnit“是Java程序的 浏览器”。HtmlUnit支持HTTP,HTTPS,COOKIE,表单的POST和GET方法,能够对HTML文档进行包装,页面的各种元素都可以被 当作对象进行调用,另外对JavaScript的支持也比较好。一般来说,HtmlUnit是在java环境下解决JS的很好的选择。


  WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTML和KJS;目前比较主流的浏览器Google Chrome和Apple的safari,都是基于WebKit的内核写的。使用浏览器作为抓取能更好的模拟用户浏览的行为,能够天然的解决JS和AJAX等问题,问题可能就是性能是一个瓶颈。


  3、抓取策略:那些网页是我们需要去下载的,那些是无需下载的,那些网页是我们优先下载的,定义清楚之后,能节省很多无谓的爬取。


  使用URL的正则特征是一个简单但却很高效的模式;对于定向抓取,一般的网站的URL有一定的特征,比如可能仅仅关心 .html, .htm, .asp, .aspx, .php, .jsp, .jspx类型的网页;或者是如果可以得到目标网站的正则,则可以大大的降低抓取的数量;又或者我们无需关心某一类网页,比如我们不抓取 bbs.taobao.com下面的内容;仅仅需要抓取淘宝的商品页面(http://item.taobao.com/item.htm?id=\d+ )。


       通过URL的正则能极大的降低抓取数量,也可以通过网页的文本特征来确定;不过要复杂得多了,一般需要一定数量已知页面的训练集合,然后提取页面的文本特征,然后通过向量空间模型或者其其他基于主题词提取的模型计算目标网页和训练集网页的距离,决定是否是目标网页。


  4、抓取频率:我们需要合理的去下载一个网站,却又不失效率。


  同时开启N个线程抓取一个网站,相信很快就会被对方网站封掉;因此抓取的频率也很重要;抓取网站同时不对对方网站造成压力;在robot.txt协 议里面定义Crawl-delay来确定抓取的频率也是一种网站的通用的做法,对于一般的抓取而言,10到20秒抓取一次是一个比较保险的频率,也有提出 10*t的抓取间隔(t是download时间)比较合理。


  以上是ET代理为大家整理的爬虫策略以及抓取频率参考,希望在大家开展爬虫的时候可以派上用场。


相关文章内容简介