APP下载

目前互联网中的网络爬虫的原理和影响

2019-12-20赵鑫炜

数码设计 2019年5期
关键词:爬虫搜索引擎网页

赵鑫炜

(四川大学锦城学院计算机与软件学院 四川 成都 611731)

目前,网络爬虫技术(Web Crawler)已经应用于互联网的绝大多数地方。其体现为有搜索行为发生的时刻也就意味着爬虫技术正在应用,但是搜索引擎仅是爬虫技术其中一个应用点。爬虫技术的应用场景简而言之就是就是把在网页上显示的信息通过代码技术自动获取处理需要的信息到本地的过程,这种行为也就建立信息获得者与被信息被获得者的利弊关系。

1 网络爬虫实现原理

1.1 网络爬虫技术语言的选择

应用的与爬虫技术目前主流的分别是C\C++,java和python,三者都是实现网络爬虫十分成熟的语言。目前互联网中主流的搜索引擎都是采用了C\C++编写爬虫,拥有cspider等框架,c/c++不失作为最高效的爬虫语言之一,但学习成本和实现成本高昂。Java作为一个老牌主流语言在爬虫的实现方面已有较为成熟的框架SeimiCrawler、WebMagic等,有着优秀的线程进程管理机制,同时也能够适应较为负责的爬虫设计。

Python作为一门最近兴起的语言拥有强大的库支持和稳定的线程,进程模式,这使python也成为编写爬虫较为主流的语言。其它语言例如php等因为糟糕的线程机制或过于小众实现成本太高而没有成为目前爬虫技术的主流选择。

1.2 网络爬虫的基本流程

一个网络爬虫所需完成最基本的工作[1]如下:(1)在一个网页上,获取网页的标题和网页中的摘要;(2)将搜集到的网页标题,链接,网页的摘要放入数据库中;(3)根据当前网页的内容,搜集网页中的链接信息,并根据链接顺序搜索相应链接网页的内容。

首先明确在流程中所需要的必要几个关键点(1)url统一资源定位符:为爬虫指明就提需要获取资源在互联网中的地址(2)网页请求:在用户的正常操作时候点击一个链接向服务器发送了一个请求(request),这个请求传到服务器逻辑处理过后又向用户发送了一个客户端所需要的响应信息(response),在爬虫技术里就需要通过代码来模拟请求和处理返回的响应信息获得目标信息(3)DOM解析:实际上在客户端与服务器上传输的不是用户看到的网页页面,而是一组由服务器组装好包含目标数据的代码,这些代码通过浏览器DOM树渲染成客户端的页面,DOM文档中包含了目标数据。

一个完整的爬虫程序流程:首先通过(1)根据构造一个已知的url向服务器发送网页请求(2)正确请求到需要的响应信息,否则回到第一步发送正确网络请求(3)对返回的响应信息进行DOM解析,重复第一步构造新的url判进行新的网页请求(4)对DOM文档数据进行过滤获得目标信息并保存到本地。

基于java实现上述流程至少需要一个启动爬虫项目的Crawler启动类、一个用于实现多线程的MultithreadCrawler类、urlLinks类、一个用来发送请求和响应RequestAndResponse类、一个用来获取响应信息内容ResponseData类、一个用来过滤提取响应信息的DataDetector类。实现过程为在UrlLinks类里使用Set来存放url和一个LinkedList设置需要访问的url序列,MultithreadCrawler中Thread方法实现多线程提高效率,RequestAndResponse类中使用HttpClient方法根据构造好的url向服务器发送实际请求,ResponseData检查返回的响应信息是否是我们需要的数据并决定是否继续请求,DataDetector使用cssSelector选择需要的元素并通过正则表达等方法获取到需要的信息。这是在最理想的情况下使用爬虫技术获取到最简单的数据,在实际操作中更多复杂的情况产生。

1.3 网络爬虫的技术难点

本文在爬虫流程所述第一步构造url就是爬虫设计者需要攻克的第一个方向,绝大多数目标资源都无法直接获得url。爬虫技术本身就是一个极其耗费网络带宽和机器资源的程序,这也要求设计者良好的控制爬虫程序的多线程控制。对爬取程序的算法的设计,爬虫算法 有广度优先策略(BFS)、深度优先策略(DFS)、非完全PageRank策略(Partial PageRank)、OCIP策略(Online Page Importance Computation)等,从而影响爬取的整律回报率,决定了网络爬虫得到全局范围内的最优结果。在获取到网页响应信息后还需要正确的解析提取。

2 爬虫技术的博弈

2.1 网络爬虫的现状

网络爬虫的根据功能分类中可以分为网页类爬虫和接口类爬虫。前者是被搜索引擎所用,原理是根据互联网上的链接进行遍历获取网页。后者是根据特定的接口构造精准的API获取大量目标数据,例如第三方火车票、机票购票软件就是通过特点API获取到票务信息。

根据具体引用的不同又分为三类[2],批量型爬虫(Batch Crawler)、增量型爬虫(Incremental Crawler)和垂直型爬虫(Focused Crawler)。批量型爬虫主要是适应于小型需求用来爬取设定好范围目标特定目标的资源,例如目前的为保持实时更新的搜索引擎。垂直型爬虫应用于在一个大范围爬取目标里面精确爬取到目标从而节省资源,例如需要在商城中爬取到所有有关计算机硬件的商品。

根据爬虫是意图可以分为善意型和恶性型。善意型爬虫主要是被爬取方希望被此爬虫收录或者双方拥有合作协议,诸多著名搜索引擎就是一个善意的网络爬虫,也有部分拥有合作协议的双方利用爬虫进行双方数据库补全、数据交换等。恶意爬虫主要是未授权的第三方爬取目标资源的爬虫程序,主要可以应用于商业数据分析竞争,数据库恶意获取等,恶意爬虫不光会对被爬取方造成带宽服务器等硬件负担还会盗取到更有价值的商业信息。

2.2 网络爬虫的攻防

在互联网中爬虫于反爬虫技术之间的攻防时时刻刻都在发生,本小节将介绍几种较为常见的爬虫攻防策略。

(1)首先爬虫实际是在代码层面进行网页请求,此时网站可以检测访问者是否是浏览器访问从而封堵部分爬虫,爬虫同时也可以伪造自己的请求头为自己访问添加一个User-Agent使网站判断自己为网页访问。(2)对用户的操作弹出验证码验证,普通的爬虫会不断根据爬虫设计者的设计重复的爬取当网站检测到大量的重复请求后会弹出验证码验证访问者是否是机器,而爬虫可以借助更多的算法设计来识别当前验证码并自动填入后继续爬取或借助第三方打码平台填入验证码。(3)对于有价值的数据设定登录可访问,网站一般会通过储存在客户端的cookies、token和session来判断当前用户,爬虫程序当然也可以通过更复杂的方法来伪造这些信息。(4)网站从服务器返回一组加密过的字段通过前端复杂的JavaScript来解析这些字段正常显示,爬虫也就需要强大是js功力来逆向模拟这些js处理。(5)由于爬虫程序是在同一ip地址下大批量访问,网站会检测同一个ip的访问频率阻止爬虫,爬虫程序此时可以购买更多的ip地址组成ip池来应对。

3 结语

本文阐述了目前网络爬虫的基本原理,实现爬虫技术所需要的关键技术点和技术难点,在基于java语言实现的一个基本网络爬虫流程。分析了主要爬虫的几种分类方法和实例,在目前爬虫技术在网络中出现博弈现象和几种主要的攻防策略体现。当今数据爆炸时代,数据就像一个钻石矿,当它的首要价值被发掘后仍能不断给予[2],爬虫技术就是为了获取这些数据而生,爬虫技术的发展和博弈会将日益突出。

猜你喜欢

爬虫搜索引擎网页
利用网络爬虫技术验证房地产灰犀牛之说
Chrome 99 Canary恢复可移除预置搜索引擎选项
基于Python的网络爬虫和反爬虫技术研究
基于HTML5与CSS3的网页设计技术研究
世界表情符号日
基于Django 的分布式爬虫框架设计与实现*
基于HTML语言的网页制作方法
基于HTML5静态网页设计
谁抢走了低价机票
搜索引擎怎样对网页排序