有哪些开源的爬虫,网页抓取 的框架或工具
首先爬虫框架有三种1. 分布式爬虫:Nutch2. JAVA单机爬虫:Crawler4j,WebMagic,WebCollector3. 非JAVA单机爬虫:scrapy第一类:分布式爬虫优点:1. 海量URL管理2. 网速快缺点:1. Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。
Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。
对精抽取没有太大的意义。
2. 用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。
而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非。
3. Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。
如果集群机器数量较少,爬取速度反而不如单机爬虫。
4. Nutch虽然有一套插件机制,而且作为亮点宣传。
可以看到一些开源的Nutch插件,提供精抽取的功能。
但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。
利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。
5. Nutch并没有为精抽取提供相应的插件挂载点。
Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。
大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text)6. 用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。
了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。
调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。
7. Nutch2的版本目前并不适合开发。
官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。
Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。
而且非常不稳定(一直在修改)。
第二类:JAVA单机爬虫优点:1. 支持多线程。
2. 支持代理。
3. 能过滤重复URL的。
4. 负责遍历网站和下载页面。
爬js生成的信息和网页信息抽取模块有关,往往需要通过模拟浏览器(htmlunit,selenium)来完成。
缺点:设计模式对软件开发没有指导性作用。
用设计模式来设计爬虫,只会使得爬虫的设计更加臃肿。
第三类:非JAVA单机爬虫优点:1. 先说python爬虫,python可以用30行代码,完成JAVA 2. 50行代码干的任务。
python写代码的确快,但是在调试代码的阶段,python代码的调试往往会耗费远远多于编码阶段省下的时间。
3. 使用python开发,要保证程序的正确性和稳定性,就需要写更多的测试模块。
当然如果爬取规模不大、爬取业务不复杂,使用scrapy这种爬虫也是蛮不错的,可以轻松完成爬取任务。
缺点:1. bug较多,不稳定。
1. 爬虫可以爬取ajax信息么?网页上有一些异步加载的数据,爬取这些数据有两种方法:使用模拟浏览器(问题1中描述过了),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。
如果是自己生成ajax请求,使用开源爬虫的意义在哪里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。
2. 如果我已经可以生成我所需要的ajax请求(列表),如何用这些爬虫来对这些请求进行爬取? 爬虫往往都是设计成广度遍历或者深度遍历的模式,去遍历静态或者动态页面。
爬取ajax信息属于deepweb(深网)的范畴,虽然大多数爬虫都不直接支持。
但是也可以通过一些方法来完成。
比如WebCollector使用广度遍历来遍历网站。
爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。
简单来说,就是将生成的ajax请求作为种子,放入爬虫。
用爬虫对这些种子,进行深度为1的广度遍历(默认就是广度遍历)。
3. 爬虫怎么爬取要登陆的网站?这些开源爬虫都支持在爬取时指定cookies,模拟登陆主要是靠cookies。
至于cookies怎么获取,不是爬虫管的事情。
你可以手动获取、用http请求模拟登陆或者用模拟浏览器自动登陆获取cookie。
4. 爬虫怎么抽取网页的信息?5. 开源爬虫一般都会集成网页抽取工具。
主要支持两种规范:CSSSELECTOR和XPATH。
6. 网页可以调用爬虫么?爬虫的调用是在Web的服务端调用的,平时怎么用就怎么用,这些爬虫都可以使用。
7. 爬虫速度怎么样?单机开源爬虫的速度,基本都可以讲本机的网速用到极限。
爬虫的速度慢,往往是因为用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速度慢。
而这些东西,往往都是用户的机器和二次开发的代码决定的。
这些开源爬虫的速度,都很可以。
目前做的最好的爬虫项目是哪个,开源github
如下:大型的:Nutch apache/nutch · GitHub适合做搜索引擎,分布式爬虫是其中一个功能。
Heritrix internetarchive/heritrix3 · GitHub比较成熟的爬虫。
小型的:Crawler4j yasserg/crawler4j · GitHubWebCollector CrawlScript/WebCollector · GitHub(国人作品)目标是在让你在5分钟之内写好一个爬虫。
参考了crawler4j,如果经常需要写爬虫,需要写很多爬虫,还是不错的,因为上手肯定不止5分钟。
缺点是它的定制性不强。
WebMagic code4craft/webmagic · GitHub(国人作品,推荐)垂直、全栈式、模块化爬虫。
更加适合抓取特定领域的信息。
它包含了下载、调度、持久化、处理页面等模块。
每一个模块你都可以自己去实现,也可以选择它已经帮你实现好的方案。
这就有了很强的定制性。
我想用c编写一个爬虫程序,可是看完一本c语言教程后,还是觉得只会...
展开全部 开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1.分布式爬虫:Nutch 2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector 3. 非JAVA单机爬虫:scrapy 第一类:分布式爬虫 爬虫使用分布式,主要是解决两个问题: 1)海量URL管理 2)网速 现在比较流行的分布式爬虫,是Apache的Nutch。
但是对于大多数用户来说,Nutch是这几类爬虫里,最不好的选择,理由如下: 1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。
Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。
对精抽取没有太大的意义。
也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。
而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架了。
2)Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。
如果集群机器数量较少,爬取速度反而不如单机爬虫快。
3)Nutch虽然有一套插件机制,而且作为亮点宣传。
可以看到一些开源的Nutch插件,提供精抽取的功能。
但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。
利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。
而且Nutch并没有为精抽取提供相应的插件挂载点。
Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。
大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text文本)。
4)用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。
了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。
调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。
5)很多人说Nutch2有gora,可以持久化数据到avro文件、hbase、mysql等。
很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。
并不是你要抽取的结构化数据。
其实对大多数人来说,URL信息存在哪里无所谓。
6)Nutch2的版本目前并不适合开发。
官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。
如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用0.90版本左右的hbase,相应的就要将hadoop版本降到hadoop 0.2左右。
而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x,这个Nutch2.x官网上写的是可以支持到hbase 0.94。
但是实际上,这个Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。
而且非常不稳定(一直在修改)。
所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。
有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。
如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。
Nutch1.x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。
如果非要用Nutch2的话,建议等到Nutch2.3发布再看。
目前的Nutch2是一个非常不稳定的版本。
第二类:JAVA单机爬虫 这里把JAVA爬虫单独分为一类,是因为JAVA在网络爬虫这块的生态圈是非常完善的。
相关的资料也是最全的。
这里可能有争议,我只是随便扯淡。
其实开源网络爬虫(框架)的开发非常简单,难问题和复杂的问题都被以前的人解决了(比如DOM树解析和定位、字符集检测、海量URL去重),可以说是毫无技术含量。
包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码非常简单。
网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。
没有任何难度可言。
之所以选择开源爬虫框架,就是为了省事。
比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是需要一段时间的调试和修改的。
对于爬虫的功能来说。
用户比较关心的问题往往是: 1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么? 不支持多线程、不支持代理、不能过滤重复URL的,那都不叫开源爬虫,那叫循环执行http请求。
能不能爬js生成的信息和爬虫本身没有太大关系。
爬虫主要是负责遍历网站和下载页面。
爬js生成的信息和网页信息抽取模块有关,往往需要通过模拟浏览器(htmlunit,selenium)来完成。
这些模拟浏览器,往往需要耗费很多的时间来处理一个页面。
所以一种策略就是,使用这些爬虫来遍历网站,遇到需要解析的页面,就将网页的相关信息提交给模拟浏览器...
开源软件有哪些?
有些人问,开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1.分布式爬虫:Nutch2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector3. 非JAVA单机爬虫:scrapy第一类:分布式爬虫爬虫使用分布式,主要是解决两个问题:1)海量URL管理2)网速现在比较流行的分布式爬虫,是Apache的Nutch。
但是对于大多数用户来说,Nutch是这几类爬虫里,最不好的选择,理由如下:1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。
Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。
对精抽取没有太大的意义。
也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。
而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架了。
2)Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。
如果集群机器数量较少,爬取速度反而不如单机爬虫快。
3)Nutch虽然有一套插件机制,而且作为亮点宣传。
可以看到一些开源的Nutch插件,提供精抽取的功能。
但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。
利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。
而且Nutch并没有为精抽取提供相应的插件挂载点。
Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。
大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text文本)。
4)用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。
了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。
调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。
5)很多人说Nutch2有gora,可以持久化数据到avro文件、hbase、mysql等。
很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。
并不是你要抽取的结构化数据。
其实对大多数人来说,URL信息存在哪里无所谓。
6)Nutch2的版本目前并不适合开发。
官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。
如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用0.90版本左右的hbase,相应的就要将hadoop版本降到hadoop 0.2左右。
而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x,这个Nutch2.x官网上写的是可以支持到hbase 0.94。
但是实际上,这个Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。
而且非常不稳定(一直在修改)。
所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。
有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。
如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。
Nutch1.x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。
如果非要用Nutch2的话,建议等到Nutch2.3发布再看。
目前的Nutch2是一个非常不稳定的版本。
如何使用Java语言实现一个网页爬虫
Java开源Web爬虫Heritrix Heritrix是一个开源,可扩展的web爬虫项目。
Heritrix设计成严格按照robots.txt文件的排除指示和META robots标签。
更多Heritrix信息WebSPHINX WebSPHINX是一个Java类包和Web爬虫的交互式开发环境。
Web爬虫(也叫作机器人或蜘蛛)是可以自动浏览与处理Web页面的程序。
WebSPHINX由两部分组成:爬虫工作平台和WebSPHINX类包。
更多WebSPHINX信息WebLech WebLech是一个功能强大的Web站点下载与镜像工具。
它支持按功能需求来下载web站点并能够尽可能模仿标准Web浏览器的行为。
WebLech有一个功能控制台并采用多线程操作。
什么叫爬虫技术?有什么作用?
1、爬虫技术概述 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索方式。
从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。
然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。
另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题: (1) 对抓取目标的描述或定义; (2) 对网页或数据的分析与过滤; (3) 对URL的搜索策略。
2、爬虫原理 2.1 网络爬虫原理 Web网络爬虫系统的功能是下载网页数据,为搜索引擎系统提供数据来源。
很多大型的网络搜索引擎系统都被称为基于 Web数据采集的搜索引擎系统,比如 Google、Baidu。
由此可见Web 网络爬虫系统在搜索引擎中的重要性。
网页中除了包含供用户阅读的文字信息外,还包含一些超链接信息。
Web网络爬虫系统正是通过网页中的超连接信息不断获得网络上的其它网页。
正是因为这种采集过程像一个爬虫或者蜘蛛在网络上漫游,所以它才被称为网络爬虫系统或者网络蜘蛛系统,在英文中称为Spider或者Crawler。
2.2 网络爬虫系统的工作原理 在网络爬虫的系统框架中,主过程由控制器,解析器,资源库三部分组成。
控制器的主要工作是负责给多线程中的各个爬虫线程分配工作任务。
解析器的主要工作是下载网页,进行页面的处理,主要是将一些JS脚本标签、CSS代码内容、空格字符、HTML标签等内容处理掉,爬虫的基本工作是由解析器完成。
资源库是用来存放下载到的网页资源,一般都采用大型的数据库存储,如Oracle数据库,并对其建立索引。
控制器 控制器是网络爬虫的**控制器,它主要是负责根据系统传过来的URL链接,分配一线程,然后启动线程调用爬虫爬取网页的过程。
解析器 解析器是负责网络爬虫的主要部分,其负责的工作主要有:下载网页的功能,对网页的文本进行处理,如过滤功能,抽取特殊HTML标签的功能,分析数据功能。
资源库 主要是用来存储网页中下载下来的数据记录的容器,并提供生成索引的目标源。
中大型的数据库产品有:Oracle、Sql Server等。
Web网络爬虫系统一般会选择一些比较重要的、出度(网页中链出超链接数)较大的网站的URL作为种子URL集合。
网络爬虫系统以这些种子集合作为初始URL,开始数据的抓取。
因为网页中含有链接信息,通过已有网页的 URL会得到一些新的 URL,可以把网页之间的指向结构视为一个森林,每个种子URL对应的网页是森林中的一棵树的根节点。
这样,Web网络爬虫系统就可以根据广度优先算法或者深度优先算法遍历所有的网页。
由于深度优先搜索算法可能会使爬虫系统陷入一个网站内部,不利于搜索比较靠近网站首页的网页信息,因此一般采用广度优先搜索算法采集网页。
Web网络爬虫系统首先将种子URL放入下载队列,然后简单地从队首取出一个URL下载其对应的网页。
得到网页的内容将其存储后,再经过解析网页中的链接信息可以得到一些新的URL,将这些URL加入下载队列。
然后再取出一个URL,对其对应的网页进行下载,然后再解析,如此反复进行,直到遍历了整个网络或者满足某种条件后才会停止下来。
网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL; 2.将这些URL放入待抓取URL队列; 3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。
此外,将这些URL放进已抓取URL队列; 4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。
2.3 抓取策略 在爬虫系统中,待抓取URL队列是很重要的一部分。
待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。
而决定这些URL排列顺序的方法,叫做抓取策略。
下面重点介绍几种常见的抓取策略: 2.3.1 深度优先遍历策略 深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。
我们以下面的图为例: 遍历的路径:A-F-G E-H-I B C D 2.3.2 宽度优先遍历策略 宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接**待抓取URL队列的末尾。
也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其...
转载请注明出处51数据库 » 开源爬虫软件.net
我的名字常么么么么么么么么么么么么么