邹科文++李达++邓婷敏++李嘉振++陈义明
摘要:随着计算机技术和internet的迅猛发展,信息和知识呈现爆炸性的增长,如何获取和利用信息成为现代社会提高竞争力的重要途径,网络爬虫是达到这一途径的重要工具。该文详细阐述了网络爬虫的体系结构、工作原理和URL搜索策略,针对某些网站采用的“反爬”措施,提出了几种爬取策略,以实现网页的有效爬取。对实际网络爬虫获取信息具有重要的参考价值。
关键词:网络爬虫;反爬虫机制;搜索引擎
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)07-0061-03
信息和知识爆炸增长的时代,搜索引擎成为人们获取信息的重要工具。搜索引擎释放出来的网络爬虫会大量占用互联网带宽,很可能在短时间内导致网站访问速度缓慢,甚至无法访问。应对此种情况,许多网站采取了一些措施来拦截网络爬虫的爬取。本文在分析网络爬虫原理的基础上,针对“反爬”网站提出了一些有效的爬取策略。
1网络爬虫概述
网络爬虫是抓取网页信息的一种程序,它可用来检查一系列站点的有效性,当按照需求抓取并保存数据时,是搜索引擎的重要组成部分。它还可以定向采集某些网站下的特定信息,比如招聘、二手买卖等信息。
网络上的网页许多都由超链接连接,故形成了一张网,网络爬虫因此也叫做网络蜘蛛,顺着网爬,每到一个网页就抓取信息并抽取新的超链接,用于进一步爬行的线索。网络爬虫爬行的起点叫做种子,可以自己设定也可以从某些系列网站获取。
1.1网络爬虫的组成
网络爬虫主要由控制器、解析器和资源库三部分组成。控制器是网络爬虫的控制中心,它负责分配线程并调用爬虫为其分配爬取任务;解析器是网络爬虫的核心,它的主要工作是下载网页并对网页中的信息进行处理,例如删除一些JS脚本、HTML标签和空格字符等,抽取特殊HTML标签的功能,分析数据功能;资源库是用于保存下载的网页资源,并提供生成索引的目标源。一般采用中大型的数据库存储,如Oracle、Sql Server等。
1.2网络爬虫的工作原理
网络爬虫的基本工作流程如下:
1)选取初始种子URL集合;
2)将URL集合放入待抓取URL队列;
3)从待抓取URL队列中取出待抓取URL,解析DNS,得到主机IP,将URL对应网页下载并存储至网页资源库。结束后将这些URL放入已抓取URL队列。
4)从已抓取URL队列中的URL分析出新的满足需求的URL,放入待抓取URL队列。
5)循环第3步,直至满足停止条件。
传统网络爬虫框架如图1所示。
1.3网络爬虫的搜索策略
网络爬虫在运行过程中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL如何排序也是一个值得研究的问题,因为这涉及先抓取那个页面,后抓取哪个页面。而排列URL顺序的方法,叫做抓取策略。常见的网络爬虫策略有:
1)广度优先搜索策略。在抓取过程中,由根节点开始,完成当前层次的搜索后才跳到下一层次的搜索。该策略实现较为简单,其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。
2)深度优先搜索策略。这种策略的主要思想是网络爬虫从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。
3)最佳优先搜索策略。该策略通过计算 URL 描述文本与目标网页的相似度,或者与主题的相关性,根据所设定的阈值选出有效 URL 进行抓取。
4)反向链接数策略,反向链接数是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序。
2如何应对站点反爬虫机制
网络爬虫会对目标站点发送大量请求,而这样的爬虫机制会消耗不少网站资源,这对于中小型网站的负载是 巨大的,甚至因此而崩溃,故不少网站都采取了反爬虫的机制。例如:通过识别爬虫的User-Agent信息来拒绝爬虫,通过Filter过滤网络爬虫,通过网站流量统计系统和日志分析来识别爬虫,利用网站的实时反爬虫防火墙实现策略。为了不被站点判断为爬虫而被拒绝访问请求,此处提供两种方法来维持爬虫的正常运转。
2.1降低访问请求频率
降低访问请求频率,在一定程度上是,模仿真人浏览页面的动作,故而不会轻易被网站所封杀,拒绝访问。实现的方法为在访问URL的程序中,将访问请求的线程休眠一段时间。
具体代码如下:
try { Thread.currentThread().sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Sleep的休眠时间按照需求而定,以毫秒(ms)为单位。这种策略的优点是减少了目标站点单位时间内的负载,而缺点则为爬虫爬取效率的降低。
2.2设置代理服务器
设置代理服务器,较之前一种方法来说则以爬虫的效率为首要要求,实质就是某些网站的反爬虫机制会封杀爬虫请求频率过高的主机的IP,为了解决这一问题,使用代理服务器,更换IP以及端口,解除站点对访问频率高的主机访问的限制。
有两种调用的方法,具体代码如下:
方法一:
Jsoup.connect("http://pv.sohu.com/cityjson").proxy(Proxy.Type.HTTP, "61.158.237.35", 3128).get();
方法二:
System.setProperty("proxySet", "true"); System.setProperty("http.proxyHost", "61.158.237.35"); System.setProperty("http.proxyPort", "3128");
Document a = Jsoup.connect("http://pv.sohu.com/cityjson").get();
System.out.println(a);
其中的代理IP与端口为 61.158.237.35:3128。
代理前后的效果如图2,3所示。
优点:保证爬虫执行不被站点封杀。只要有足够IP代理可满足爬取条件。
缺点:单位时间内消耗资源过多,给站点带来较大的负载。延迟加大,失败率提高。
2.3伪装用户代理
用户代理User-agent是HTTP协议中的一个字段,作用是描述发出HTTP请求终端的一些信息。通俗来说,就是判断访问网站对象的类别,每个浏览器和正规的爬虫都有固定的user-agent,因此只要将这个字段改成知名的user-agent就可以成功伪装了。对于伪装浏览器user-agent或知名爬虫user-agent,更推荐伪装浏览器,因为浏览器使用者可以是任何人,没有固定的IP,而知名爬虫user-agent一般都有固定IP。下面给出若干个浏览器的user-agent,每次发送请求时可随机选取一个。
Mozilla/4.0( compatible ;MSIE 8.0;Windows NT 6.0)
Mozilla/4.0( compatible ;MSIE 7.0;Windows NT 5.2)
Mozilla/4.0( compatible ;MSIE 6.0;Windows NT 5.1)
设置代码如下:
HttpGet getMethod = new HttpGet(“URl”);
getMethod.setHeader(“User-Agent”,”user agent内容”);
2.4 自动登录
有些网站一检测到某IP的访问量异常,就会马上提出要登录的要求。针对这种“反爬”策略,在登录前需要做一些准备,查清楚POST登录请求时要附带的参数,建议先用badboy录制登录过程,然后将这一过程导出为jmeter文件,最后用jmeter查看登录所需的参数。
3结束语
总之,为了防止爬虫被封,原则就是伪装成正常的用户,只要按照这个原则总有方法可循。不过若是能熟知一些反爬虫的原理,然后有针对地进行拆招应该还是十分有效的。
传统网络爬虫应用于抓取静态Web网页的信息,而AJAX/Web2.0的流行使得如何抓取动态页面信息成为目前网络爬虫的瓶颈。另外,网络爬虫的效率与网站稳定安全还未能完全达到两者兼得的状态。对于搜索引擎,它抓取的消耗较大,因此爬虫的效率、特性和抓取的质量就显得更为重要。在未来的大数据时代,网络爬虫技术地位更为重要,和人工智能技术相结合将是热门的课题。
参考文献:
[1] 郭小丹.几种开源网络爬虫功能比较[J].黑龙江科技信息,2015(25).
[2] 林雄强.网络爬虫[J].中国科技博览,2014(24).
[3] 赵全军,成功,李小正,等.一种改进的网络爬虫搜索策略[J].中国科技信息,2014(14).
[4] 刘庆杰,孙旭光,王小英.通过Filter抵御网页爬虫[J].网络安全技术与应用,2010(1).
[5] 吴晓晖,纪星.Web爬虫检测技术综述[J].湖北汽车工业学院学报,2012(1).
[6] 范纯龙,袁滨,余周华, 等.基于陷阱技术的网络爬虫检测[J].计算机应用,2010(7).
[7] 吴欢,宋力,刘遇哲.基于HTTP协议特征字的识别研究[J].计算机与网络,2015(9).