目前,大多数大型爬虫系统采用的是分布式方式,但仍然不能满足用户的实际需要。下面是小编为您整理的关于数据爬虫什么意思,希望对你有所帮助。
数据爬虫什么意思
数据爬虫是请求网站并提取数据的自动化程序。网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
爬虫基本流程
发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
获取响应内容:如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
网络爬虫都能做什么?
网络爬虫是一种程序,主要用于搜索引擎,它将一个网站的所有内容与链接进行阅读,并建立相关的全文索引到数据库中,然后跳到另一个网站.样子好像一只大蜘蛛.
当人们在网络上(如google)搜索关键字时,其实就是比对数据库中的内容,找出与用户相符合的.网络爬虫程序的质量决定了搜索引擎的能力,如google的搜索引擎明显要比百度好,就是因为它的网络爬虫程序高效,编程结构好.
爬虫可以爬取ajax信息么
网页上有一些异步加载的数据,爬取这些数据有两种方法:使用模拟浏览器(问题1中描述过了),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果是自己生成ajax请求,使用开源爬虫的意义在哪里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。
如果我已经可以生成我所需要的ajax请求(列表),如何用这些爬虫来对这些请求进行爬取?
爬虫往往都是设计成广度遍历或者深度遍历的模式,去遍历静态或者动态页面。爬取ajax信息属于deep web(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方法来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的*轮爬取就是爬取种子集合(seeds)中的所有url。简单来说,就是将生成的ajax请求作为种子,放入爬虫。用爬虫对这些种子,进行深度为1的广度遍历(默认就是广度遍历)。
爬虫怎么爬取要登陆的网站?
这些开源爬虫都支持在爬取时指定cookies,模拟登陆主要是靠cookies。至于cookies怎么获取,不是爬虫管的事情。你可以手动获取、用http请求模拟登陆或者用模拟浏览器自动登陆获取cookie。
爬虫怎么抽取网页的信息?
开源爬虫一般都会集成网页抽取工具。主要支持两种规范:CSS SELECTOR和XPATH。至于哪个好,这里不评价。
爬虫怎么保存网页的信息?
有一些爬虫,自带一个模块负责持久化。比如webmagic,有一个模块叫pipeline。通过简单地配置,可以将爬虫抽取到的信息,持久化到文件、数据库等。还有一些爬虫,并没有直接给用户提供数据持久化的模块。比如crawler4j和webcollector。让用户自己在网页处理模块中添加提交数据库的操作。至于使用pipeline这种模块好不好,就和操作数据库使用ORM好不好这个问题类似,取决于你的业务。
数据爬虫综述
随着大数据时代的来临,互联网对人类的生活影响越来越深入,已经成为人类获取信息的主要来源之一。互联网为用户带来海量数据的同时也带来了困扰,如何及时获得有效信息成为研究重点。搜索引擎根据预定的策略从互联网上发现和抓取数据,存入本地;对数据进行去噪、抽取和生成索引等处理,最终为用户提供信息检索服务,将相关信息展示给用户的系统。
爬虫(Crawler)是搜索引擎架构中的*层模块,以一定的策略从互联网上抓取数据,并对数据进行预处理,然后将处理后的数据提交给搜索引擎其他模块,数据的质量和数量直接影响用户的体验。但是,随着大数据时代互联网数据爆炸式增长,爬虫抓取数据的速度越来越不能满足实际应用的需要。解决这个问题主要从软硬件考虑:一是升级爬虫的硬件,使用性能更好的硬件设备,但性价比不高,且不易扩展;二是利用分布式方式提高爬虫的并行处理能力,但这种方法会增加爬虫系统设计的复杂度。
其次,爬虫系统还需解决网页动态变化导致本地副本过期的问题。网页随时都可能变化,有的几小时更新一次,爬虫系统必须及时的发现并更新本地的网页,但互联网*中网页数量多、分布广,爬虫系统更新一遍需要数周甚至更长的时间,使得本地库中网页副本时新性较低。因此,一个采集速度快,网页更新及时的高可靠爬虫系统,不仅仅为搜索引擎提供基础数据,也可以为数据分析、挖掘提供基础数据,从而获得信息、知识。
Nutch 是Apache 软件基金会的一个开源项目,由Java 编写的可扩展和可伸缩的搜索引擎,具有跨平台的优点,使用基于模块化的思想设计。它基于Hadoop的分布式处理模型保证了系统的性能,类似Eclipse 的插件机制有利于用户自定义扩展Nutch。Nutch 为我们研究搜索引擎爬虫的原理及工作机制提供了一个很好的平台。
Nutch 有两种运行模式:分布式模式和单机模式。分布式模式采用HDFS 作为存储文件系统,并利用MapReduce 实现爬虫抓取网页的各个环节,从而使Nutch 能够抓取、存储海量网页。Nutch有两部分:爬虫和检索。爬虫负责从互联网抓取数据存储在本地,索引程序对抓取在本地的数据建立索引,然后存储在索引库。检索程序接收用户的查询请求,搜索索引库中的索引并返回结果。
Nutch 爬虫系统是由爬虫程序以及用于维护相关数据结构的程序组成,采用插件机制进行设计,因此可以很清晰地分离出爬虫运行各阶段的任务。Nutch 的爬虫通过累积式抓取和增量式抓取方式从互联网中将网页抓下来,分布式模式下将数据存储在HDFS 中,为其他模块提供基础数据。在 Hadoop 分布式平台下,Nutch 在抓取数据的各阶段都向Hadoop 提交MapReduce job,且这些job 都有严格的前后顺序关系。
Nutch 爬行工作流程如下:
1)建立初始种子URL 集:一般新建一个文件包含指定的网址,上传到HDFS上。非全网爬行时,还需在$NUTCH_HOME/conf/regex- 文件中设置超链接的过滤规则,过滤掉不合规则的URL;
2)Inject:该操作是由.crawl 包中的Injector 类完成,将URL集注入 CrawlDB 数据库。利用插件 URL Normalizers 和URL Filters 对URL 格式化、过滤,消去重复的URL,并设置URL 状态和初始化分值,再更新CrawlDB 数据库中相对应的内容,并标记已经爬行的URL;
3)Generate:该操作是由.crawl 包中的Generator 类完成,从CrawlDB 数据库中取出URL 创建抓取列表。当一次爬行完成后, Generate 阶段利用CrawlDB 库中的信息对已爬的URL进行过滤,之后运用Hash 算法对URL 进行降序排列,结果存入segments 目录下的一个目录,目录名是一个时间戳。循环爬行多少次,segments 目录下就有多少这样的文件;
4)Fetch:该操作是由.fetcher 包中的Fetcher 类完成,执行抓取,获取网页信息。抓取按 segments 目录下的URL 列表进行,可以自定义爬行的深度(depth)及线程数,适度的增加线程数可以很好地提高Nutch 爬行的效率。网页结果存储在segments 相对应的目录下;
5)Parse:该操作是由. parse 包中的ParseSegment 类完成。对 Fetch 抓到的网页进行解析,得到parse-data 和parse-text 两个目录。parse-text 目录存储的是网页的文本信息,parse-data 目录存储的是日期、超链接、题名等其他网页信息;
6)Update CrawlDB:该操作是由.crawl 包中的CrawlDb 类完成。根据抓取下来的 segments 目录下的内容更新CrawlDB数据库,更新包括URL爬行周期、爬行间隔、网页指纹等,还要将Parse 阶段解析出的新的URL 加入到CrawlDB,为新的抓取提供URL列表;
7)循环执行3~6 的步骤,直到depth 的值。以上循环过程可以总结为“产生/抓取/更新”循环;
8)Update linkDB:Nutch 爬行结束后,更新linkDB 并建立索引。
Nutch 网页更新机制采用的是邻比法。对*次采集的网页,邻比法设置其更新时间为初始值。如果该网页在这个时间内更新了,则更新时间缩小一定值;如果没有更新,则更新时间增加一定值。Nutch 网页更新机制我们称为Recrawl 机制,它提供AdaptiveFetchSchedule class 来管理爬虫的重新抓取。
Nutch作为开源的搜索引擎框架,能够得到极速的发展使用,不仅是因为Nutch具有以上的功能,还有一项重要的机制促使了Nutch的快速发展,那便是Nutch的插件机制,这种机制极大地方便了研究工作,通过这个扩展机制,能满足了个性化需求。Nutch的插件机制的基本思想是借鉴了Eclipse软件对插件的使用。其优点主要体现为以下几点:
1.可扩展性。插件机制的使用,极大地提高了Nutch对于不同应用的扩展,在实际开发中只需要对特定的接口进行简单的实现,便能够生成具有特定功能的搜索引擎,满足了各种特色的搜索服务。
2.灵活性。插件拥有着强大的资源库,这些插件都在Nutch的plugins中,开发者在使用Nutch框架定制符合自己需求的插件,,比如:开发者可以选择不同的实现算法,寻找满足自己需要的*解,也可以增加对不同格式文档的分析解压。
3.可维护性。每个开发者只需要关注自己需要关注的问题,如内核的开发者为引擎内核扩展时,只需添加一个描述它的接口;plugin的开发者只需关注这个plugin所要实现的功能,不需要完全了解整个系统工作的工作流程。仅仅需要知道plugin和plug之间交换的数据类型。这使得内核更加简单,也更容易维护。
插件机制在Nutch中的实现,是由Nutch框架提供的扩展点,为其增加一系列的扩展项,从而实现复杂的业务功能。
Nutch的爬虫属于普通的爬虫,这样的爬虫在工作的时候,首先要选好一定的URL集合作为一个起始队列。爬虫通过爬取、解析等过程,获取到网页上新的URL,并且把这些URL添加到队列之中,当*轮抓取完成之后,就会继续以这些获取到的新的URL为起始地址,继续向深层次抓取,如此循环抓取,直到满足抓取停止的条件或者队列为空,爬虫才会停止工作。普通的爬虫一般会包括待爬行队列模块,获取网页模块,页面解析模块等。
与普通爬虫相比,主题爬虫一般会增加一个主题相关度判断的模块,也是主题爬虫的核心模块。该模块负责爬虫在抓取到网页之后,对网页的内容进行一次主题判断,如果判断结果为与主题相关或者相近,则该页面可以保留;若判断结果为该页面与主题无直接关系,则可以认为这个页面对于抓取后的操作意义不大,可以直接舍弃。由此可以推断出,抓取页面质量的优劣直接有主题爬虫设计的好坏决定,而主题爬虫好坏又直接受到主题相关度判断模块影响。
目前,主要的主题爬虫爬行策略有两种:一是广度优先搜索策略,二是*优先搜索策略。二者各有优点和缺点,很多时候都是结合着使用的。
广度优先搜索策略是一种图形搜索算法,在互联网上,网页与网页之间相联系是靠URL,假设通过页面A上的某一URL可以跳转到页面B,则可以认为页面A为上层,页面B为下层。广度优先搜索策略都是按照层次搜索的,总是优先搜索上层的结点,从根节点出发,逐层向下搜索新的与上层邻近的节点,网页的存在基本上就是被URL分成了层。
*优先搜索策略的实施与网页评分相关联。进行*优先搜索,要给每一个页面进行一个打分,分数的高低也直接决定了网页的优劣。网页抓取到之后,也会根据网页的分数的高低将网页放入队列,便于下一轮的抓取操作。该算法相较于广度优先搜索策略有一定的优势,但是也存在自身的缺点,就是网页的主题性往往是不连贯的,需要经过多层的网页也许才会到达另一个与主题相关的网页,这就产生了“隧道”现象。