爬虫,有什么框架比httpclient更快

爬虫,有什么框架比httpclient更快,第1张

爬虫技术

爬虫主要针对与网络网页,又称网络爬虫、网络蜘蛛,可以自动化浏览网络中的信息,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以便程序做下一步的处理。

爬虫技术步骤

我们绝大多数人每天都使用网络 - 用于新闻,购物,社交以及您可以想象的任何类型的活动。但是,当从网络上获取数据用于分析或研究目的时,则需要以更技术性的方式查看Web内容 - 将其拆分为由其组成的构建块,然后将它们重新组合为结构化的,机器可读数据集。通常文本Web内容转换为数据分为以下三个基本步骤 :

爬虫:

Web爬虫是一种自动访问网页的脚本或机器人,其作用是从网页抓取原始数据 - 最终用户在屏幕上看到的各种元素(字符、)。 其工作就像是在网页上进行ctrl + a(全选内容),ctrl + c(复制内容),ctrl + v(粘贴内容)按钮的机器人(当然实质上不是那么简单)。

通常情况下,爬虫不会停留在一个网页上,而是根据某些预定逻辑在停止之前抓取一系列网址 。 例如,它可能会跟踪它找到的每个链接,然后抓取该网站。当然在这个过程中,需要优先考虑您抓取的网站数量,以及您可以投入到任务中的资源量(存储,处理,带宽等)。

解析:

解析意味着从数据集或文本块中提取相关信息组件,以便以后可以容易地访问它们并将其用于其他 *** 作。要将网页转换为实际上对研究或分析有用的数据,我们需要以一种使数据易于根据定义的参数集进行搜索,分类和服务的方式进行解析。

存储和检索:

最后,在获得所需的数据并将其分解为有用的组件之后,通过可扩展的方法来将所有提取和解析的数据存储在数据库或集群中,然后创建一个允许用户可及时查找相关数据集或提取的功能。

爬虫技术有什么用

1、网络数据采集

利用爬虫自动采集互联网中的信息(、文字、链接等),采集回来后进行相应的储存与处理。并按照一定的规则和筛选标准进行数据归类形成数据库文件的一个过程。但在这个过程中,首先需要明确要采集的信息是什么,当你将采集的条件收集得足够精确时,采集的内容就越接近你想要的。

2、大数据分析

大数据时代,要进行数据分析,首先要有数据源,通过爬虫技术可以获得等多的数据源。在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得,但从这些获得数据的方式,有时很难满足我们对数据的需求,此时就可以利用爬虫技术,自动地从互联网中获取需要的数据内容,并将这些数据内容作为数据源,从而进行更深层次的数据分析。

3、网页分析

通过对网页数据进行爬虫采集,在获得网站访问量、客户着陆页、网页关键词权重等基本数据的情况下,分析网页数据,从中发现访客访问网站的规律和特点,并将这些规律与网络营销策略等相结合,从而发现目前网络营销活动和运营中可能存在的问题和机遇,并为进一步修正或重新制定策略提供依据。

多次被人问到这个问题,看来需要做一点说明,这里简单介绍一下搜索引擎的机器爬虫的制作和一些基本要注意的事项。
说的简单易懂一些,网络爬虫跟你使用的〖离线阅读〗工具差不多。说离线,其实还是要跟网络联结,否则怎么抓东西下来?
那么不同的地方在哪里?
1 网络爬虫高度可配置性。
2 网络爬虫可以解析抓到的网页里的链接
3 网络爬虫有简单的存储配置
4 网络爬虫拥有智能的根据网页更新分析功能
5 网络爬虫的效率相当的高
那么依据特征,其实也就是要求了,如何设计爬虫呢?要注意哪些步骤呢?
1 url 的遍历和纪录
这点 larbin 做得非常的好,其实对于url的遍历是很简单的,例如:
cat [what you got]| tr \" \\n | gawk '{print $2}' | pcregrep ^>开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1分布式爬虫:Nutch
2JAVA单机爬虫: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版本是nutch221,但是这个版本绑定了gora-03。如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用090版本左右的hbase,相应的就要将hadoop版本降到hadoop 02左右。而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1x和Nutch2x,这个Nutch2x官网上写的是可以支持到hbase 094。但是实际上,这个Nutch2x的意思是Nutch23之前、Nutch221之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。
所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。
如果你是要做搜索引擎,Nutch1x是一个非常好的选择。Nutch1x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch23发布再看。目前的Nutch2是一个非常不稳定的版本。
第二类:JAVA单机爬虫
这里把JAVA爬虫单独分为一类,是因为JAVA在网络爬虫这块的生态圈是非常完善的。相关的资料也是最全的。这里可能有争议,我只是随便扯淡。
其实开源网络爬虫(框架)的开发非常简单,难问题和复杂的问题都被以前的人解决了(比如DOM树解析和定位、字符集检测、海量URL去重),可以说是毫无技术含量。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码非常简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是需要一段时间的调试和修改的。
对于爬虫的功能来说。用户比较关心的问题往往是:
1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么?
不支持多线程、不支持代理、不能过滤重复URL的,那都不叫开源爬虫,那叫循环执行>开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1分布式爬虫:Nutch
2JAVA单机爬虫: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版本是nutch221,但是这个版本绑定了gora-03。如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用090版本左右的hbase,相应的就要将hadoop版本降到hadoop 02左右。而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1x和Nutch2x,这个Nutch2x官网上写的是可以支持到hbase 094。但是实际上,这个Nutch2x的意思是Nutch23之前、Nutch221之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。
所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。
如果你是要做搜索引擎,Nutch1x是一个非常好的选择。Nutch1x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch23发布再看。目前的Nutch2是一个非常不稳定的版本。
第二类:JAVA单机爬虫
这里把JAVA爬虫单独分为一类,是因为JAVA在网络爬虫这块的生态圈是非常完善的。相关的资料也是最全的。这里可能有争议,我只是随便扯淡。
其实开源网络爬虫(框架)的开发非常简单,难问题和复杂的问题都被以前的人解决了(比如DOM树解析和定位、字符集检测、海量URL去重),可以说是毫无技术含量。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码非常简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是需要一段时间的调试和修改的。
对于爬虫的功能来说。用户比较关心的问题往往是:
1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么?
不支持多线程、不支持代理、不能过滤重复URL的,那都不叫开源爬虫,那叫循环执行>开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1分布式爬虫:Nutch
2JAVA单机爬虫: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版本是nutch221,但是这个版本绑定了gora-03。如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用090版本左右的hbase,相应的就要将hadoop版本降到hadoop 02左右。而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1x和Nutch2x,这个Nutch2x官网上写的是可以支持到hbase 094。但是实际上,这个Nutch2x的意思是Nutch23之前、Nutch221之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。
所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。
如果你是要做搜索引擎,Nutch1x是一个非常好的选择。Nutch1x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch23发布再看。目前的Nutch2是一个非常不稳定的版本。
第二类:JAVA单机爬虫
这里把JAVA爬虫单独分为一类,是因为JAVA在网络爬虫这块的生态圈是非常完善的。相关的资料也是最全的。这里可能有争议,我只是随便扯淡。
其实开源网络爬虫(框架)的开发非常简单,难问题和复杂的问题都被以前的人解决了(比如DOM树解析和定位、字符集检测、海量URL去重),可以说是毫无技术含量。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码非常简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是需要一段时间的调试和修改的。
对于爬虫的功能来说。用户比较关心的问题往往是:
1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么?
不支持多线程、不支持代理、不能过滤重复URL的,那都不叫开源爬虫,那叫循环执行>发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector其按照我经验随便扯淡:面说爬虫基本3类:1布式爬虫:Nutch
2JAVA单机爬虫:Crawler4j、WebMagic、WebCollector
3 非JAVA单机爬虫:scrapy
第类:布式爬虫
爬虫使用布式主要解决两问题:
1)海量URL管理
2)网速
现比较流行布式爬虫ApacheNutch于数用户说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)说Nutch2gora持久化数据avro文件、hbase、mysql等其实理解错说持久化数据指URL信息(URL管理所需要数据)存放avro、hbase、mysql并要抽取结构化数据其实数说URL信息存哪所谓
6)Nutch2版本目前并适合发官现稳定Nutch版本nutch221版本绑定gora-03想用hbase配合nutch(数用nutch2用hbase)能使用090版本左右hbase相应要hadoop版本降hadoop 02左右且nutch2官教程比较误导作用Nutch2教程两别Nutch1xNutch2xNutch2x官网写支持hbase 094实际Nutch2x意思Nutch23前、Nutch221版本版本官SVN断更新且非稳定(直修改)
所要做搜索引擎尽量要选择Nutch作爬虫些团队喜欢跟风非要选择Nutch发精抽取爬虫其实冲着Nutch名气(Nutch作者Doug Cutting)结往往项目延期完
要做搜索引擎Nutch1x非选择Nutch1xsolr或者es配合构套非强搜索引擎非要用Nutch2建议等Nutch23发布再看目前Nutch2非稳定版本
第二类:JAVA单机爬虫
JAVA爬虫单独类JAVA网络爬虫块态圈非完善相关资料全能争议我随便扯淡
其实源网络爬虫(框架)发非简单难问题复杂问题都前解决(比DOM树解析定位、字符集检测、海量URL重)说毫技术含量包括Nutch其实Nutch技术难点发hadoop本身代码非简单网络爬虫某种意义说类似遍历本机文件查找文件信息没任何难度言所选择源爬虫框架省事比爬虫URL管理、线程池类模块谁都能做要做稳定需要段间调试修改
于爬虫功能说用户比较关问题往往:
1)爬虫支持线程、爬虫能用代理、爬虫爬取重复数据、爬虫能爬取JS信息
支持线程、支持代理、能滤重复URL都叫源爬虫叫循环执行>我使用的就是DEBIAN,但也找不到 gmake 以下是网上找的,希望对你有帮助:
(直接地说,就是在debian上,不需要gmake,可能是你所使用的larbin版本不对,其编译脚本不是linux的
直接使用
/configure
make
)
可参考
>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13339395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-17
下一篇 2023-07-17

发表评论

登录后才能评论

评论列表(0条)

保存