导航:首页 > 编程大全 > hadoop网络爬虫

hadoop网络爬虫

发布时间:2025-03-22 22:43:55

㈠ 开源爬虫框架各有什么优缺点

首先爬虫框架有三种

  1. 分布式爬虫:Nutch

  2. JAVA单机爬虫:Crawler4j,WebMagic,WebCollector

  3. 非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较多,不稳定。

㈡ 现在的网络爬虫的研究成果和存在的问题有哪些

网络爬虫是Spider(或Robots、Crawler)等词的意译,是一种高效的信息抓取工具,它集成了搜索引擎技术,并通过技术手段进行优化,用以从互联网搜索、抓取并保存任何通过HTML(超文本标记语言)进行标准化的网页信息。

其作用机理是:发送请求给互联网特定站点,在建立连接后与该站点交互,获取HTML格式的信息,随后转移到下一个站点,并重复以上流程。通过这种自动化的工作机制,将目标数据保存在本地数据中,以供使用。网络爬虫在访问一个超文本链接时,可以从HTML标签中自动获取指向其他网页的地址信息,因而可以自动实现高效、标准化的信息获取。

随着互联网在人类经济社会中的应用日益广泛,其所涵盖的信息规模呈指数增长,信息的形式和分布具有多样化、全球化特征,传统搜索引擎技术已经无法满足日益精细化、专业化的信息获取和加工需求,正面临着巨大的挑战。网络爬虫自诞生以来,就发展迅猛,并成为信息技术领域的主要研究热点。当前,主流的网络爬虫搜索策略有如下几种。

>>>>
深度优先搜索策略

早期的爬虫开发采用较多的搜索策略是以深度优先的,即在一个HTML文件中,挑选其中一个超链接标签进行深度搜索,直至遍历这条超链接到最底层时,由逻辑运算判断本层搜索结束,随后退出本层循环,返回上层循环并开始搜索其他的超链接标签,直至初始文件内的超链接被遍历。

深度优先搜索策略的优点是可以将一个Web站点的所有信息全部搜索,对嵌套较深的文档集尤其适用;而缺点是在数据结构日益复杂的情况下,站点的纵向层级会无限增加且不同层级之间会出现交叉引用,会发生无限循环的情况,只有强行关闭程序才能退出遍历,而得到的信息由于大量的重复和冗余,质量很难保证。

>>>>
宽度优先搜索策略

与深度优先搜索策略相对应的是宽度优先搜索策略,其作用机理是从顶层向底层开始循环,先就一级页面中的所有超链接进行搜索,完成一级页面遍历后再开始二级页面的搜索循环,直到底层为止。当某一层中的所有超链接都被选择过,才会基于该层信息检索过程中所获得的下一级超链接(并将其作为种子)开始新的一轮检索,优先处理浅层的链接。

这种模式的一个优点是:无论搜索对象的纵向结构层级有多么复杂,都会极大程度上避免死循环;另一个优势则在于,它拥有特定的算法,可以找到两个HTML文件间最短的路径。一般来讲,我们期望爬虫所具有的大多数功能目前均可以采用宽度优先搜索策略较容易的实现,所以它被认为是最优的。

但其缺点是:由于大量时间被耗费,宽度优先搜索策略则不太适用于要遍历特定站点和HTML文件深层嵌套的情况。

>>>>
聚焦搜索策略

与深度优先和宽度优先不同,聚焦搜索策略是根据“匹配优先原则”对数据源进行访问,基于特定的匹配算法,主动选择与需求主题相关的数据文档,并限定优先级,据以指导后续的数据抓取。

这类聚焦爬虫针对所访问任何页面中的超链接都会判定一个优先级评分,根据评分情况将该链接插入循环队列,此策略能够帮助爬虫优先跟踪潜在匹配程度更高的页面,直至获取足够数量和质量的目标信息。不难看出,聚焦爬虫搜索策略主要在于优先级评分模型的设计,亦即如何区分链接的价值,不同的评分模型针对同一链接会给出不同的评分,也就直接影响到信息搜集的效率和质量。

同样机制下,针对超链接标签的评分模型自然可以扩展到针对HTML页面的评价中,因为每一个网页都是由大量超链接标签所构成的,一般看来,链接价值越高,其所在页面的价值也越高,这就为搜索引擎的搜索专业化和应用广泛化提供了理论和技术支撑。当前,常见的聚焦搜索策略包括基于“巩固学习”和“语境图”两种。

从应用程度来看,当前国内主流搜索平台主要采用的是宽度优先搜索策略,主要是考虑到国内网络系统中信息的纵向价值密度较低,而横向价值密度较高。但是这样会明显地遗漏到一些引用率较小的网络文档,并且宽度优先搜索策略的横向价值富集效应,会导致这些链接量少的信息源被无限制的忽略下去。

而在此基础上补充采用线性搜索策略则会缓解这种状况,不断引入更新的数据信息到已有的数据仓库中,通过多轮的价值判断去决定是否继续保存该信息,而不是“简单粗暴”地遗漏下去,将新的信息阻滞在密闭循环之外。

>>>>
网页数据动态化

传统的网络爬虫技术主要局限于对静态页面信息的抓取,模式相对单一,而近年来,随着Web2.0/AJAX等技术成为主流,动态页面由于具有强大的交互能力,成为网络信息传播的主流,并已取代了静态页面成为了主流。AJAX采用了JavaScript驱动的异步(非同步)请求和响应机制,在不经过网页整体刷新的情况下持续进行数据更新,而传统爬虫技术缺乏对JavaScript语义的接口和交互能力,难以触发动态无刷新页面的异步调用机制并解析返回的数据内容,无法保存所需信息。

此外,诸如JQuery等封装了JavaScript的各类前端框架会对DOM结构进行大量调整,甚至网页上的主要动态内容均不必在首次建立请求时就以静态标签的形式从服务器端发送到客户端,而是不断对用户的操作进行回应并通过异步调用的机制动态绘制出来。这种模式一方面极大地优化了用户体验,另一方面很大程度上减轻了服务器的交互负担,但却对习惯了DOM结构(相对不变的静态页面)的爬虫程序提出了巨大挑战。

传统爬虫程序主要基于“协议驱动”,而在互联网2.0时代,基于AJAX的动态交互技术环境下,爬虫引擎必须依赖“事件驱动”才有可能获得数据服务器源源不断的数据反馈。而要实现事件驱动,爬虫程序必须解决三项技术问题:第一,JavaScript的交互分析和解释;第二,DOM事件的处理和解释分发;第三,动态DOM内容语义的抽取。

前嗅的ForeSpider数据采集系统全方位支持各种动态网站,大部分网站通过可视化的操作就可以获取。对于反爬虫机制严格的网站,通过ForeSpider内部的脚本语言系统,通过简单的脚本语言,就可以轻松获取。

>>>>
数据采集分布化

分布式爬虫系统是在计算机集群之上运转的爬虫系统,集群每一个节点上运行的爬虫程序与集中式爬虫系统的工作原理相同,所不同的是分布式需要协调不同计算机之间的任务分工、资源分配、信息整合。分布式爬虫系统的某一台计算机终端中植入了一个主节点,并通过它来调用本地的集中式爬虫进行工作,在此基础上,不同节点之间的信息交互就显得十分重要,所以决定分布式爬虫系统成功与否的关键在于能否设计和实现任务的协同。

此外,底层的硬件通信网络也十分重要。由于可以采用多节点抓取网页,并能够实现动态的资源分配,因此就搜索效率而言,分布式爬虫系统远高于集中式爬虫系统。

经过不断的演化,各类分布式爬虫系统在系统构成上各具特色,工作机制与存储结构不断推陈出新,但主流的分布式爬虫系统普遍运用了“主从结合”的内部构成,也就是由一个主节点通过任务分工、资源分配、信息整合来掌控其他从节点进行信息抓取。

在工作方式上,基于云平台的廉价和高效特点,分布式爬虫系统广泛采用云计算方式来降低成本,大规模降低软硬件平台构建所需要的成本投入。在存储方式方面,当前比较流行的是分布式信息存储,即将文件存储在分布式的网络系统上,这样管理多个节点上的数据更加方便。通常情况下使用的分布式文件系统为基于Hadoop的HDFS系统。

目前市场上的可视化通用性爬虫,大都牺牲了性能去换取简易的可视化操作。但前嗅的ForeSpider爬虫不是。ForeSpider采用C++编程,普通台式机日采集量超过500万条/天,服务器超过4000万条/天。是市场上其他可视化爬虫的10倍以上。同时,ForeSpider内嵌前嗅自主研发的ForeLib数据库,免费的同时支持千万量级以上的数据存储。

>>>>
通用型和主题型网络爬虫

依据采集目标的类型,网络爬虫可以归纳为“通用型网络爬虫”和“主题型网络爬虫”两种。

通用型网络爬虫侧重于采集更大的数据规模和更宽的数据范围,并不考虑网页采集的顺序和目标网页的主题匹配情况。在当前网络信息规模呈现指数增长的背景下,通用型网络爬虫的使用受到信息采集速度、信息价值密度、信息专业程度的限制。

为缓解这种状况,主题型网络爬虫诞生了。不同于通用型网络爬虫,主题型网络爬虫更专注采集目标与网页信息的匹配程度,避免无关的冗余信息,这一筛选过程是动态的,贯穿于主题型网络爬虫技术的整个工作流程。

目前市面上的通用性爬虫的采集能力有限,采集能力不高,网页结构复杂的页面无法采集。前嗅ForeSpider爬虫是通用型的网络爬虫,可以采集几乎100%的网页,并且内部支持可视化筛选、正则表达式、脚本等多种筛选,可以100%过滤无关冗余内容,按条件筛选内容。相对主题型爬虫只能采集一类网站而言,通用型的爬虫有着更强的采集范围,更加经济合理。

㈢ 一分钟了解互联网数据挖掘流程

一分钟了解互联网数据挖掘流程

1、爬虫抓取网络数据

真实的数据挖掘项目,一定是从获取数据开始的,除了通过一些渠道购买或者下载专业数据外,常常需要大家自己动手爬互联网数据,这个时候,爬虫就显得格外重要了。

Nutch爬虫的主要作用是从网络上抓取网页数据并建立索引。我们只需指定网站的顶级网址,如taobao.com,爬虫可以自动探测出页面内容里新的网址,从而进一步抓取链接网页数据。nutch支持把抓取的数据转化成文本,如(PDF、word、EXCEL、HTML、XML等形式)转换成纯文字字符。

Nutch与Hadoop集成,可以将下载的数据保存到hdfs,用于后续离线分析。使用步骤为:

向hdfs中存入待抓取的网站url

$ hadoop fs -put urldir urldir

注:

第一个urldir为本地文件夹,存放了url数据文件,每行一个url地址

第二个urldir为hdfs的存储路径。

启动nutch,在NUTCH_HONE目录下执行以下命令

$ bin/nutch crawlurldir –dir crawl -depth 3 –topN 10

命令成功执行后,会在hdfs中生成crawl目录。

2、MapRece预处理数据

对于下载的原始文本文档,无法直接进行处理,需要对文本内容进行预处理,包括文档切分、文本分词、去停用词(包括标点、数字、单字和其它一些无意义的词)、文本特征提取、词频统计、文本向量化等操作。

常用的文本预处理算法是TF-IDF,其主要思想是,如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来做分类。

输入原始文本内容:

Againit seems that cocoa delivered……

执行TF-IDF预处理:

hadoop jar $JAR ……

输出文本向量:

9219:0.246 453:0.098 10322:0.21 11947:0.272 ……

每一列是词及其权重,使用冒号分隔,例如“9219:0.246”表示编号为9219的词,对应原始单词为“Again”,其权重值为0.246。

3、Mahout数据挖掘

预处理后的数据就可以用来做数据挖掘。Mahout是一个很强大的数据挖掘工具,是分布式机器学习算法的集合,包括:协同过滤、分类、聚类等。

以LDA算法为例,它可以将文档集中每篇文档的主题按照概率分布的形式给出。它是一种无监督学习算法,在训练时不需要手工标注主题,需要的仅仅是指定主题的数量K。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。

输入预处理后的数据:

9219:0.246 453:0.098 ……

执行LDA挖掘算法:

mahout cvb –k 20……

输出挖掘结果:

topic1 {computer,technology,system,internet,machine}

topic2 {play,film,movie,star,director,proction,stage}

我们可以获知用户的偏好是哪些主题,这些主题是由一些关键词组成。

4、Sqoop导出到关系数据库

在某些场景下,需要把数据挖掘的结果导出到关系数据库,用于及时响应外部应用查询。

sqoop是一个用来把hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle 等)中的数据导入到hadoop的hdfs中,也可以将hdfs的数据导出到关系型数据库中:

sqoop export –connect jdbc:mysql://localhost:3306/zxtest –username root–password root –table result_test –export-dir /user/mr/lda/out

export操作实现把hdfs目录/user/mr/lda/out下数据导出到mysql的result_test表。

阅读全文

与hadoop网络爬虫相关的资料

热点内容
javascript完全参考手册 浏览:890
电视机文件夹为空没有内容为什么 浏览:781
安卓手机屏幕坏了如何转出文件 浏览:508
个人大数据包含哪些方面 浏览:281
绝地求生win10全屏 浏览:260
编程类研究生都有哪些 浏览:434
苹果6港版鉴别真伪 浏览:291
上海公司章程网站怎么打印 浏览:261
在少儿编程如何拐弯发射物品 浏览:226
列表怎么设置动态数据 浏览:238
什么网站可以买到玉 浏览:50
3dmine最新版本 浏览:80
iphone手机微信发文件 浏览:223
手机网络劫持 浏览:640
app叫什么平台 浏览:308
91pr压缩包密码 浏览:452
还有哪些能访问的英文网站 浏览:487
定时任务命令行和配置文件的区别 浏览:347
win7ghost哪个版本好 浏览:794
win10通过ip共享打印机 浏览:183

友情链接