
nutch
主流开源爬虫框架比较与剖析
采集交流 • 优采云 发表了文章 • 0 个评论 • 327 次浏览 • 2020-07-03 08:01
2.1 网路爬虫的组成部分主流爬虫框架一般由以下部份组成:1. 种子URL库:URL用于定位互联网中的各种资源,如最常见的网页链接,还有常见的文件资源、流媒体资源等。种子URL库作为网络爬虫的入口,标识出爬虫应当从何处开始运行,指明了数据来源。2.数据下载器:针对不同的数据种类,需要不同的下载形式。主流爬虫框架通畅提供多种数据下载器,用来下载不同的资源,如静态网页下载器、动态网页下载器、FTP下载器等。3.过滤器:对于早已爬取的URL,智能的爬虫须要对其进行过滤,以提升爬虫的整体效率。常用的过滤器有基于集合的过滤器、基于布隆过滤的过滤器等。4.流程调度器:合理的调度爬取流程,也可以提升爬虫的整体效率。在流程调度器中,通常提供深度优先爬取、广度优先爬取、订制爬取等爬取策略。同时提供单线程、多线程等多种爬取方法。2.2 网络爬虫的爬取策略网路爬虫的爬取策略,可以更高效的组织爬虫的爬取过程。常见的爬取策略包括深度优先爬取、深度优先爬取、订制爬取等策略等。1.深度优先爬取:该策略在爬取每位URL资源后,会随机爬取改URL对应的所有子URL资源,直到全部子URL资源全部爬取完毕,再爬取下一个URL资源。
深度优先爬取更关注数据的深度,希望通过爬取更多的子URL资源,来获取更深层次的数据。2.广度优先爬取:该策略在爬取配个URL资源时,会继续爬取同层次的其他URL资源,当本层的URL资源都被爬取完毕后,再爬取下一次URL资源。广度优先爬取更关注数据的广度,这样可以囊括更全面的数据。3.订制爬取:再好多场景中,深度优先爬取或广度优先爬取未能满足复杂的数据采集需求,此时须要定制爬取策略,如垂直搜索策略,先通过制订关键词进行搜索后开源爬虫框架,再结合深度优先爬取或广度优先爬取,才可以获取到垂直领域的特定数据。2.3 爬虫的增量爬取从数据的角度看,有些爬虫只进行单次的爬取操作,而有些爬虫须要进行增量爬取,用来积累数据。对于单次爬取的网路爬虫,实现较为简单,因为不用考虑过滤去重等操作,所以模块相对较少。单次爬取的爬虫主要考虑爬取的效率,有时会通过多线程或多进程等形式提升爬取效率。对于须要增量爬取的网路爬虫。通常须要对URL链接、资源内容等进行过滤和去重。每次爬取的时侯,需要对比数据是否重复,并将早已爬取过的内容过滤掉,从而降低冗余数据的爬取和储存。实际应用中,增量爬虫的使用较为广泛。3.主流开源爬虫框架爬虫技术发展至今,已经非常成熟,同时也形成了好多开源的爬虫框架,入Nutch、Heritrix、Larbin、Scrapy,这些开源框架的实现语言与功能各不相同,以下是这几款开源爬虫框架的比较与剖析。
3.1 NutchNutch是一个比较小型的开源框架,也是隶属于Apache基金会的一个开源项目。Nutch最初服务于Lucene项目,Lucene是一个完整的搜索引擎框架,其中Nutch提供数据爬取服务。因为Lucene是一个通用的搜索引擎框架,所以Nutch在设计之初也主要用于通用数据的爬取。在满足通用需求的同时,Nutch牺牲了一些多样化开发的特点。优点:Nutch适用于各类规模的爬取任务,底层可以和Hadoop平台对接,提供分布式的爬取功能,同时支持分布式的调度及分布式的储存。为了扩充各种多样化功能,Nutch设计了插件框架,可以通过添加插件,来实现愈发复杂的爬取功能。缺点:虽然有插件框架,但是Nutch的多样化开发成本仍然较高。 在使用默认的配置过滤文件是,是不抓取动态网页的,要想爬取动态网页须要更改过滤规则。3.2 HeritrixHeritrix是基于Java语言的爬虫框架,因其可扩展型和丰富的各种组件而闻名。但配置相对繁杂,所以学习成本过高。Heritrix提供了多种下载器,用于下载网页、流媒体等多种类型的数据。Heritrix还提供了图形界面拿来管理爬虫,可以通过网页来启动货控制各种爬虫。
优点:Heritrix的爬虫订制参数多包括,可设置输出日志、可设置多线程采集模式、可设置下载速率上限等 开发者可以通过更改组件的参数,来高效的更改爬虫功能 。缺点:Heritrix很难实现分布式爬取,因为多个单独爬虫之间,无法合作完成爬取任务,可扩展性较差。在爬取失败时,也缺少重万方数据 67 ELECTRONICS WORLD 探求与观察工作台处于清洁的状态,并监督工作人员防静电腕带的配戴情况,且使用的钳子须要具有防静电的功能,或者在取料的时侯利用真空吸笔完成,放置静电在元器件于手接触时形成,第四,定期对相关设施进行防静电测试处理 [6] 。二、SMT表面贴装技术的发展趋势近些年来,我国科学技术水平在社会经济快速发展的影响下得到了迅猛发展,表面贴装技术在此背景下也获得了宽广的发展空间,并将会以小型化、精细化的方向不断发展。针对SMT表面贴装技术的发展趋势进行剖析可以发觉,在未来的发展过程中,将会大幅度缩小SDC/SMD的容积,并其而不断扩大其生产数目,就现阶段表面贴装技术的发展现况而言,将0603以及1005型表面贴膜式电容和内阻商品化的目的已然实现。同时,集成电路的发展方向将会是小型化和STM化,现阶段,市场上早已出现了腿宽度为0.3mm的IC业,其发展方向将是BGA。
此外,焊接技术也将会逐步趋向成熟阶段,惰性气体于1994年便早已被点焊设备厂家制造下来以满足回流焊以及波峰焊的需求。与此同时免清洗工业也涌现下来但是应用非常广泛。最后,测试设备以及贴片设备的效率将会大幅度提高,且灵活性也会不断增强。目前,在使用SMT技术的时侯,其贴片速率大概在5500片/h左右,通过使用高柔化和智能化的贴片系统促使制造商的生产成品被大幅度增加,进而促使生产效率以及精度的提高,并且丰富了贴片的功能 [7] 。三、结束语与传统的THT而言,SMT的优势主要表现在其性能好、组装密度高以及体积小和可靠性强等方面,受到其上述优势的影响,现阶段电子设备以及电子产品的装配技术均以SMT为主,并且在电子产品的生产制造领域得到广泛应用。尽管在实际应用的时侯,SMT仍然表现出一些不足之处,但是与其所发挥的正面影响对比,这些不足并不影响该技术应用价值。所以,需要加强SMT技术的宣传力度,促进其应用可以覆盖更多领域。与此同时,还须要加到对该技术的研究力度,对其各项工艺流程给以建立,促进其所用得到充分发挥,继而有助于电子产品工艺制程清洁化、装备模块化、生产集成化和自动化的愿景尽快实现,为电子行业的可持续发展提供可靠保障。
参考文献[1] 杨柳.SMT表面贴装技术工艺应用实践[J].科研,2016(8):00079-00079.[2]孙丹妮,周娟,耿豪凯,等.累积和与指数加权移动平均控制图在表面贴装技术中的应用及仿真[J].机械制造,2017,55(3):77-80.[3]朱飞飞.谈电子工业中SMT技术的工艺研究和发展趋势[J].科研,2016(8):00286-00286.[4] 高文璇.Protel DXP技术与SMT技术在现今电子产业中的应用[J].电子世 界,2014(6):95-95.[5]王婷,方子正.SMD型表面贴装元件壳体生产中技术难点和解决举措[J].工程技术:全文版,2016(7):00253-00253.[6]周超.阐述SMT表面贴装技术工艺应用与发展趋势[J].科研,2016(12):00008-00008.[7]李金明.电子工业中SMT技术工艺研究及发展趋势[J].电子技术与软件工程,2016(13):139-139.(上接第65页)试等机制,导致开发者须要做好多额外工作来填补那些设计上的缺位。不同于Nutch框架开源爬虫框架,仅凭Heritrix不能完成搜索引擎的全部工作,而只能完成爬虫阶段的爬取工作。
3.3 LarbinLarbin是一个基于C++语言的爬虫框架。Larbin提供了相对简单单非常易用的爬虫功能。单机Larbin爬虫可以每晚获取百万量级的网页。单Larbin不提供网页解析服务,也不考虑内容的储存及处理。如果象使用Larbin进行小型系统的实现,则须要自行开发相应的其他组件。优点:指定入口URL后,可以手动扩充,甚至整个网站镜像;支持通过后缀名对抓取网页进行过滤;只保存原始网页;利用C++开发,非常高效。缺点:只有网页下载器,而没有网页解析器。不支持分布式爬取。没有手动重试功能。该项目在2003年后停止开发维护。 3.4 ScrapyScrapy是基于python语言开发的爬虫框架,由于它的轻量化设计和简单易用,而广泛遭到开发者的欢迎。优点:简单易用:只需编撰爬取规则,剩下由scrapy完成易扩充:扩展性设计,支持插件,无需改动核心代码可移植性:基于Linux、Windows、Mac、BSD开发和运行设计。缺点:单机多线程实现,不支持分布式。数据储存方案支持 Local fi lesystem、FTP、S3、Standard output,默认无分布式存储解决方案默认中间过程网页不会保存,只保存抽取结果。
4.总结与展望本文首先介绍了URL链接库、文档内容模块、文档解析模块等爬虫基础概念,然后对比剖析了Nutch、Heritrix、Larbin、Scrapy等主流开源爬虫框架。不同的爬虫开源框架的实现语言和功能不同,适用的场景也不尽相同,需要在实际应用中选择合适的开源爬虫框架。参考文献[1]刘玮玮.搜索引擎中主题爬虫的研究与实现[D].南京理工大学,2006.[2]詹恒飞,杨岳湘,方宏.Nutch分布式网路爬虫研究与优化[J].计算机科学与探求,2011,5(01):68-74.[3]安子建.基于Scrapy框架的网路爬虫实现与数据抓取剖析[D].吉林大学,2017.[4]周立柱,林玲.聚焦爬虫技术研究综述[J].计算机应用,2005(09):1965-1969.[5]杨定中,赵刚,王泰.网络爬虫在Web信息搜索与数据挖掘中应用[J].计算机工程与设计,2009,30(24):5658-5662.万方数据 查看全部
65 ELECTRONICS WORLD 探求与观察(下转第67页)主流开源爬虫框架比较与剖析北京工商大学 刘 雯【摘要】网络爬虫是搜索引擎与信息检索的基础工具,在信息采集、信息过滤等场景中有着广泛的应用。本文首先介绍了URL链接库、文档内容模块、文档解析模块等爬虫基础概念,然后对比剖析了Nutch、Heritrix、Larbin、Scrapy等主流开源爬虫框架。【关键词】网络爬虫;数据采集;搜索引擎1.引言近些年来,随着互联网的高速发展,网络中的数据呈现出了爆炸式的下降,如何搜集整合这种数据并从中提取出有效的信息,引发了多方面的挑战。面对这种挑战,爬虫技术得到了充分的注重。开源网路爬虫框架促使爬虫的开发与应用变的高效方便。各个开源爬虫框架的实现语言与功能不完全相同,适用场景也不尽相同,需要对比不同开源爬虫框架之间的好坏。2.爬虫的相关概念网路爬虫是用于互联网采集的一种工具,通常又被称为网路机器人。在数据挖掘、信息检索等领域,网络爬虫被广泛使用,从而获取最原始的数据。网络爬虫也是信息检索和搜索引擎的重要组成部份,通过网路爬虫采集到的信息,经过搜索引擎的整合,可以更好的用于检索。
2.1 网路爬虫的组成部分主流爬虫框架一般由以下部份组成:1. 种子URL库:URL用于定位互联网中的各种资源,如最常见的网页链接,还有常见的文件资源、流媒体资源等。种子URL库作为网络爬虫的入口,标识出爬虫应当从何处开始运行,指明了数据来源。2.数据下载器:针对不同的数据种类,需要不同的下载形式。主流爬虫框架通畅提供多种数据下载器,用来下载不同的资源,如静态网页下载器、动态网页下载器、FTP下载器等。3.过滤器:对于早已爬取的URL,智能的爬虫须要对其进行过滤,以提升爬虫的整体效率。常用的过滤器有基于集合的过滤器、基于布隆过滤的过滤器等。4.流程调度器:合理的调度爬取流程,也可以提升爬虫的整体效率。在流程调度器中,通常提供深度优先爬取、广度优先爬取、订制爬取等爬取策略。同时提供单线程、多线程等多种爬取方法。2.2 网络爬虫的爬取策略网路爬虫的爬取策略,可以更高效的组织爬虫的爬取过程。常见的爬取策略包括深度优先爬取、深度优先爬取、订制爬取等策略等。1.深度优先爬取:该策略在爬取每位URL资源后,会随机爬取改URL对应的所有子URL资源,直到全部子URL资源全部爬取完毕,再爬取下一个URL资源。
深度优先爬取更关注数据的深度,希望通过爬取更多的子URL资源,来获取更深层次的数据。2.广度优先爬取:该策略在爬取配个URL资源时,会继续爬取同层次的其他URL资源,当本层的URL资源都被爬取完毕后,再爬取下一次URL资源。广度优先爬取更关注数据的广度,这样可以囊括更全面的数据。3.订制爬取:再好多场景中,深度优先爬取或广度优先爬取未能满足复杂的数据采集需求,此时须要定制爬取策略,如垂直搜索策略,先通过制订关键词进行搜索后开源爬虫框架,再结合深度优先爬取或广度优先爬取,才可以获取到垂直领域的特定数据。2.3 爬虫的增量爬取从数据的角度看,有些爬虫只进行单次的爬取操作,而有些爬虫须要进行增量爬取,用来积累数据。对于单次爬取的网路爬虫,实现较为简单,因为不用考虑过滤去重等操作,所以模块相对较少。单次爬取的爬虫主要考虑爬取的效率,有时会通过多线程或多进程等形式提升爬取效率。对于须要增量爬取的网路爬虫。通常须要对URL链接、资源内容等进行过滤和去重。每次爬取的时侯,需要对比数据是否重复,并将早已爬取过的内容过滤掉,从而降低冗余数据的爬取和储存。实际应用中,增量爬虫的使用较为广泛。3.主流开源爬虫框架爬虫技术发展至今,已经非常成熟,同时也形成了好多开源的爬虫框架,入Nutch、Heritrix、Larbin、Scrapy,这些开源框架的实现语言与功能各不相同,以下是这几款开源爬虫框架的比较与剖析。
3.1 NutchNutch是一个比较小型的开源框架,也是隶属于Apache基金会的一个开源项目。Nutch最初服务于Lucene项目,Lucene是一个完整的搜索引擎框架,其中Nutch提供数据爬取服务。因为Lucene是一个通用的搜索引擎框架,所以Nutch在设计之初也主要用于通用数据的爬取。在满足通用需求的同时,Nutch牺牲了一些多样化开发的特点。优点:Nutch适用于各类规模的爬取任务,底层可以和Hadoop平台对接,提供分布式的爬取功能,同时支持分布式的调度及分布式的储存。为了扩充各种多样化功能,Nutch设计了插件框架,可以通过添加插件,来实现愈发复杂的爬取功能。缺点:虽然有插件框架,但是Nutch的多样化开发成本仍然较高。 在使用默认的配置过滤文件是,是不抓取动态网页的,要想爬取动态网页须要更改过滤规则。3.2 HeritrixHeritrix是基于Java语言的爬虫框架,因其可扩展型和丰富的各种组件而闻名。但配置相对繁杂,所以学习成本过高。Heritrix提供了多种下载器,用于下载网页、流媒体等多种类型的数据。Heritrix还提供了图形界面拿来管理爬虫,可以通过网页来启动货控制各种爬虫。
优点:Heritrix的爬虫订制参数多包括,可设置输出日志、可设置多线程采集模式、可设置下载速率上限等 开发者可以通过更改组件的参数,来高效的更改爬虫功能 。缺点:Heritrix很难实现分布式爬取,因为多个单独爬虫之间,无法合作完成爬取任务,可扩展性较差。在爬取失败时,也缺少重万方数据 67 ELECTRONICS WORLD 探求与观察工作台处于清洁的状态,并监督工作人员防静电腕带的配戴情况,且使用的钳子须要具有防静电的功能,或者在取料的时侯利用真空吸笔完成,放置静电在元器件于手接触时形成,第四,定期对相关设施进行防静电测试处理 [6] 。二、SMT表面贴装技术的发展趋势近些年来,我国科学技术水平在社会经济快速发展的影响下得到了迅猛发展,表面贴装技术在此背景下也获得了宽广的发展空间,并将会以小型化、精细化的方向不断发展。针对SMT表面贴装技术的发展趋势进行剖析可以发觉,在未来的发展过程中,将会大幅度缩小SDC/SMD的容积,并其而不断扩大其生产数目,就现阶段表面贴装技术的发展现况而言,将0603以及1005型表面贴膜式电容和内阻商品化的目的已然实现。同时,集成电路的发展方向将会是小型化和STM化,现阶段,市场上早已出现了腿宽度为0.3mm的IC业,其发展方向将是BGA。
此外,焊接技术也将会逐步趋向成熟阶段,惰性气体于1994年便早已被点焊设备厂家制造下来以满足回流焊以及波峰焊的需求。与此同时免清洗工业也涌现下来但是应用非常广泛。最后,测试设备以及贴片设备的效率将会大幅度提高,且灵活性也会不断增强。目前,在使用SMT技术的时侯,其贴片速率大概在5500片/h左右,通过使用高柔化和智能化的贴片系统促使制造商的生产成品被大幅度增加,进而促使生产效率以及精度的提高,并且丰富了贴片的功能 [7] 。三、结束语与传统的THT而言,SMT的优势主要表现在其性能好、组装密度高以及体积小和可靠性强等方面,受到其上述优势的影响,现阶段电子设备以及电子产品的装配技术均以SMT为主,并且在电子产品的生产制造领域得到广泛应用。尽管在实际应用的时侯,SMT仍然表现出一些不足之处,但是与其所发挥的正面影响对比,这些不足并不影响该技术应用价值。所以,需要加强SMT技术的宣传力度,促进其应用可以覆盖更多领域。与此同时,还须要加到对该技术的研究力度,对其各项工艺流程给以建立,促进其所用得到充分发挥,继而有助于电子产品工艺制程清洁化、装备模块化、生产集成化和自动化的愿景尽快实现,为电子行业的可持续发展提供可靠保障。
参考文献[1] 杨柳.SMT表面贴装技术工艺应用实践[J].科研,2016(8):00079-00079.[2]孙丹妮,周娟,耿豪凯,等.累积和与指数加权移动平均控制图在表面贴装技术中的应用及仿真[J].机械制造,2017,55(3):77-80.[3]朱飞飞.谈电子工业中SMT技术的工艺研究和发展趋势[J].科研,2016(8):00286-00286.[4] 高文璇.Protel DXP技术与SMT技术在现今电子产业中的应用[J].电子世 界,2014(6):95-95.[5]王婷,方子正.SMD型表面贴装元件壳体生产中技术难点和解决举措[J].工程技术:全文版,2016(7):00253-00253.[6]周超.阐述SMT表面贴装技术工艺应用与发展趋势[J].科研,2016(12):00008-00008.[7]李金明.电子工业中SMT技术工艺研究及发展趋势[J].电子技术与软件工程,2016(13):139-139.(上接第65页)试等机制,导致开发者须要做好多额外工作来填补那些设计上的缺位。不同于Nutch框架开源爬虫框架,仅凭Heritrix不能完成搜索引擎的全部工作,而只能完成爬虫阶段的爬取工作。
3.3 LarbinLarbin是一个基于C++语言的爬虫框架。Larbin提供了相对简单单非常易用的爬虫功能。单机Larbin爬虫可以每晚获取百万量级的网页。单Larbin不提供网页解析服务,也不考虑内容的储存及处理。如果象使用Larbin进行小型系统的实现,则须要自行开发相应的其他组件。优点:指定入口URL后,可以手动扩充,甚至整个网站镜像;支持通过后缀名对抓取网页进行过滤;只保存原始网页;利用C++开发,非常高效。缺点:只有网页下载器,而没有网页解析器。不支持分布式爬取。没有手动重试功能。该项目在2003年后停止开发维护。 3.4 ScrapyScrapy是基于python语言开发的爬虫框架,由于它的轻量化设计和简单易用,而广泛遭到开发者的欢迎。优点:简单易用:只需编撰爬取规则,剩下由scrapy完成易扩充:扩展性设计,支持插件,无需改动核心代码可移植性:基于Linux、Windows、Mac、BSD开发和运行设计。缺点:单机多线程实现,不支持分布式。数据储存方案支持 Local fi lesystem、FTP、S3、Standard output,默认无分布式存储解决方案默认中间过程网页不会保存,只保存抽取结果。
4.总结与展望本文首先介绍了URL链接库、文档内容模块、文档解析模块等爬虫基础概念,然后对比剖析了Nutch、Heritrix、Larbin、Scrapy等主流开源爬虫框架。不同的爬虫开源框架的实现语言和功能不同,适用的场景也不尽相同,需要在实际应用中选择合适的开源爬虫框架。参考文献[1]刘玮玮.搜索引擎中主题爬虫的研究与实现[D].南京理工大学,2006.[2]詹恒飞,杨岳湘,方宏.Nutch分布式网路爬虫研究与优化[J].计算机科学与探求,2011,5(01):68-74.[3]安子建.基于Scrapy框架的网路爬虫实现与数据抓取剖析[D].吉林大学,2017.[4]周立柱,林玲.聚焦爬虫技术研究综述[J].计算机应用,2005(09):1965-1969.[5]杨定中,赵刚,王泰.网络爬虫在Web信息搜索与数据挖掘中应用[J].计算机工程与设计,2009,30(24):5658-5662.万方数据
java爬虫技术
采集交流 • 优采云 发表了文章 • 0 个评论 • 256 次浏览 • 2020-06-27 08:00
jsoup
HeritrixNutch
java 抓取网页内容
爬虫
java 爬虫比较
Nutch
开发语言:Java
简介:
Apache的子项目之一,属于Lucene项目下的子项目。
Nutch是一个基于Lucene,类似Google的完整网路搜索引擎解决方案,基于Hadoop的分布式处理模型保证了系统的性能,类似Eclipse的插件机制保证了系统的可客户化,而且很容易集成到自己的应用之中。
Larbin
开发语言:C++
简介
larbin是一种开源的网路爬虫/网路蜘蛛,由美国的年轻人 Sébastien Ailleret独立开发。larbin目的是能否跟踪页面的url进行扩充的抓取,最后为搜索引擎提供广泛的数据来源。
Larbin只是一个爬虫,也就是说larbin只抓取网页,至于怎样parse的事情则由用户自己完成。另外,如何储存到数据库以及完善索引的事情 larbin也不提供。
latbin最初的设计也是根据设计简单而且高度可配置性的原则,因此我们可以看见,一个简单的larbin的爬虫可以每晚获取500万的网页,非常高效。
Heritrix
开发语言:Java
简介
与Nutch比较
和 Nutch。二者均为Java开源框架,Heritrix是 SourceForge上的开源产品,Nutch为Apache的一个子项目,它们都叫做网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这种资源抓取到本地,使用的技巧都是剖析网站每一个有效的URI,并递交Http请求,从而获得相应结果,生成本地文件及相应的日志信息等。
Heritrix是个 “archival crawler” — 用来获取完整的、精确的、站点内容的深度复制。包括获取图象以及其他非文本内容。抓取并储存相关的内容。对内容来者不拒,不对页面进行内容上的更改。重新爬行对相同的URL不针对原先的进行替换。爬虫通过Web用户界面启动、监控、调整,允许弹性的定义要获取的URL。
二者的差别:
Nutch 只获取并保存可索引的内容。Heritrix则是照单全收。力求保存页面原样
Nutch 可以修剪内容,或者对内容格式进行转换。
Nutch 保存内容为数据库优化格式以便之后索引;刷新替换旧的内容。而Heritrix是添加(追加)新的内容。
Nutch 从命令行运行、控制。Heritrix有 Web 控制管理界面。
Nutch 的订制能力不够强,不过现今早已有了一定改进。Heritrix可控制的参数更多。
Heritrix提供的功能没有nutch多,有点整站下载的气味。既没有索引又没有解析,甚至对于重复爬取URL都处理不是挺好。
Heritrix的功能强悍 但是配置上去却有点麻烦。
其他网路爬虫介绍:
WebLech
WebLech是一个功能强悍的Web站点下载与镜像工具。它支持按功能需求来下载web站点并才能尽可能模仿标准Web浏览器的行为。WebLech有一个功能控制台并采用多线程操作。
Arale
Arale主要为个人使用而设计,而没有象其它爬虫一样是关注于页面索引。Arale才能下载整个web站点或来自web站点的个别资源。Arale能够够把动态页面映射成静态页面。
J-Spider
J-Spider:是一个完全可配置和订制的Web Spider引擎.你可以借助它来检测网站的错误(内在的服务器错误等),网站内外部链接检测java爬虫技术,分析网站的结构(可创建一个网站地图),下载整个Web站点,你还可以写一个JSpider插件来扩充你所须要的功能。
spindle
spindle 是一个建立在Lucene工具包之上的Web索引/搜索工具.它包括一个用于创建索引的HTTP spider和一个用于搜索这种索引的搜索类。spindle项目提供了一组JSP标签库促使这些基于JSP的站点不需要开发任何Java类能够够降低搜索功能。
Arachnid
Arachnid: 是一个基于Java的web spider框架.它包含一个简单的HTML剖析器才能剖析包含HTML内容的输入流.通过实现Arachnid的泛型才能够开发一个简单的Web spiders并才能在Web站上的每位页面被解析然后降低几行代码调用。 Arachnid的下载包中包含两个spider应用程序事例用于演示怎么使用该框架。
LARM
LARM才能为Jakarta Lucene搜索引擎框架的用户提供一个纯Java的搜索解决方案。它包含才能为文件,数据库表格构建索引的方式和为Web站点建索引的爬虫。
JoBo
JoBo 是一个用于下载整个Web站点的简单工具。它本质是一个Web Spider。与其它下载工具相比较它的主要优势是能否手动填充form(如:自动登入)和使用cookies来处理session。JoBo还有灵活的下载规则(如:通过网页的URL,大小,MIME类型等)来限制下载。
snoics-reptile
snoics-reptile是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口,把这个网站所有的能用浏览器通过GET的方法获取到的资源全部抓取到本地,包括网页和各类类型的文件,如:图片、flash、mp3、zip、rar、exe等文件。可以将整个网站完整地下传至硬碟内,并能保持原有的网站结构精确不变。只须要把抓取出来的网站放到web服务器(如:Apache)中,就可以实现完整的网站镜像。
Web-Harvest
Web-Harvest是一个Java开源Web数据抽取工具。它就能搜集指定的Web页面并从这种页面中提取有用的数据。Web-Harvest主要是运用了象XSLT,XQuery,正则表达式等这种技术来实现对text/xml的操作。
spiderpy
spiderpy是一个基于Python编码的一个开源web爬虫工具,允许用户搜集文件和搜索网站,并有一个可配置的界面。
The Spider Web Network Xoops Mod Team
pider Web Network Xoops Mod是一个Xoops下的模块java爬虫技术,完全由PHP语言实现。
HiSpider is a fast and high performance spider with high speed
严格说只能是一个spider系统的框架, 没有细化需求, 目前只是能提取URL, URL排重, 异步DNS解析, 队列化任务, 支持N机分布式下载, 支持网站定向下载(需要配置hispiderd.iniwhitelist). 查看全部
htmlparse
jsoup
HeritrixNutch
java 抓取网页内容
爬虫
java 爬虫比较
Nutch
开发语言:Java
简介:
Apache的子项目之一,属于Lucene项目下的子项目。
Nutch是一个基于Lucene,类似Google的完整网路搜索引擎解决方案,基于Hadoop的分布式处理模型保证了系统的性能,类似Eclipse的插件机制保证了系统的可客户化,而且很容易集成到自己的应用之中。
Larbin
开发语言:C++
简介
larbin是一种开源的网路爬虫/网路蜘蛛,由美国的年轻人 Sébastien Ailleret独立开发。larbin目的是能否跟踪页面的url进行扩充的抓取,最后为搜索引擎提供广泛的数据来源。
Larbin只是一个爬虫,也就是说larbin只抓取网页,至于怎样parse的事情则由用户自己完成。另外,如何储存到数据库以及完善索引的事情 larbin也不提供。
latbin最初的设计也是根据设计简单而且高度可配置性的原则,因此我们可以看见,一个简单的larbin的爬虫可以每晚获取500万的网页,非常高效。
Heritrix
开发语言:Java
简介
与Nutch比较
和 Nutch。二者均为Java开源框架,Heritrix是 SourceForge上的开源产品,Nutch为Apache的一个子项目,它们都叫做网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这种资源抓取到本地,使用的技巧都是剖析网站每一个有效的URI,并递交Http请求,从而获得相应结果,生成本地文件及相应的日志信息等。
Heritrix是个 “archival crawler” — 用来获取完整的、精确的、站点内容的深度复制。包括获取图象以及其他非文本内容。抓取并储存相关的内容。对内容来者不拒,不对页面进行内容上的更改。重新爬行对相同的URL不针对原先的进行替换。爬虫通过Web用户界面启动、监控、调整,允许弹性的定义要获取的URL。
二者的差别:
Nutch 只获取并保存可索引的内容。Heritrix则是照单全收。力求保存页面原样
Nutch 可以修剪内容,或者对内容格式进行转换。
Nutch 保存内容为数据库优化格式以便之后索引;刷新替换旧的内容。而Heritrix是添加(追加)新的内容。
Nutch 从命令行运行、控制。Heritrix有 Web 控制管理界面。
Nutch 的订制能力不够强,不过现今早已有了一定改进。Heritrix可控制的参数更多。
Heritrix提供的功能没有nutch多,有点整站下载的气味。既没有索引又没有解析,甚至对于重复爬取URL都处理不是挺好。
Heritrix的功能强悍 但是配置上去却有点麻烦。
其他网路爬虫介绍:
WebLech
WebLech是一个功能强悍的Web站点下载与镜像工具。它支持按功能需求来下载web站点并才能尽可能模仿标准Web浏览器的行为。WebLech有一个功能控制台并采用多线程操作。
Arale
Arale主要为个人使用而设计,而没有象其它爬虫一样是关注于页面索引。Arale才能下载整个web站点或来自web站点的个别资源。Arale能够够把动态页面映射成静态页面。
J-Spider
J-Spider:是一个完全可配置和订制的Web Spider引擎.你可以借助它来检测网站的错误(内在的服务器错误等),网站内外部链接检测java爬虫技术,分析网站的结构(可创建一个网站地图),下载整个Web站点,你还可以写一个JSpider插件来扩充你所须要的功能。
spindle
spindle 是一个建立在Lucene工具包之上的Web索引/搜索工具.它包括一个用于创建索引的HTTP spider和一个用于搜索这种索引的搜索类。spindle项目提供了一组JSP标签库促使这些基于JSP的站点不需要开发任何Java类能够够降低搜索功能。
Arachnid
Arachnid: 是一个基于Java的web spider框架.它包含一个简单的HTML剖析器才能剖析包含HTML内容的输入流.通过实现Arachnid的泛型才能够开发一个简单的Web spiders并才能在Web站上的每位页面被解析然后降低几行代码调用。 Arachnid的下载包中包含两个spider应用程序事例用于演示怎么使用该框架。
LARM
LARM才能为Jakarta Lucene搜索引擎框架的用户提供一个纯Java的搜索解决方案。它包含才能为文件,数据库表格构建索引的方式和为Web站点建索引的爬虫。
JoBo
JoBo 是一个用于下载整个Web站点的简单工具。它本质是一个Web Spider。与其它下载工具相比较它的主要优势是能否手动填充form(如:自动登入)和使用cookies来处理session。JoBo还有灵活的下载规则(如:通过网页的URL,大小,MIME类型等)来限制下载。
snoics-reptile
snoics-reptile是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口,把这个网站所有的能用浏览器通过GET的方法获取到的资源全部抓取到本地,包括网页和各类类型的文件,如:图片、flash、mp3、zip、rar、exe等文件。可以将整个网站完整地下传至硬碟内,并能保持原有的网站结构精确不变。只须要把抓取出来的网站放到web服务器(如:Apache)中,就可以实现完整的网站镜像。
Web-Harvest
Web-Harvest是一个Java开源Web数据抽取工具。它就能搜集指定的Web页面并从这种页面中提取有用的数据。Web-Harvest主要是运用了象XSLT,XQuery,正则表达式等这种技术来实现对text/xml的操作。
spiderpy
spiderpy是一个基于Python编码的一个开源web爬虫工具,允许用户搜集文件和搜索网站,并有一个可配置的界面。
The Spider Web Network Xoops Mod Team
pider Web Network Xoops Mod是一个Xoops下的模块java爬虫技术,完全由PHP语言实现。
HiSpider is a fast and high performance spider with high speed
严格说只能是一个spider系统的框架, 没有细化需求, 目前只是能提取URL, URL排重, 异步DNS解析, 队列化任务, 支持N机分布式下载, 支持网站定向下载(需要配置hispiderd.iniwhitelist).
什么叫爬虫技术?有哪些作用?
采集交流 • 优采云 发表了文章 • 0 个评论 • 295 次浏览 • 2020-06-15 08:03
网络爬虫(Web crawler),是一种根据5261一定的规则,自动地抓取万4102维1653网信息的程序或则脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以手动采集所有其才能访问到的页面内容,以获取或更新那些网站的内容和检索方法。从功能上来讲,爬虫通常分为数据采集,处理,储存三个部份。
传统爬虫从一个或若干初始网页的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队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以里面的图为例:
遍历路径:A-B-C-D-E-F G H I
2.3.3 反向链接数策略
反向链接数是指一个网页被其他网页链接指向的数目。反向链接数表示的是一个网页的内容遭到其他人的推荐的程度。因此,很多时侯搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后次序。
在真实的网路环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那种也的重要程度。因此,搜索引擎常常考虑一些可靠的反向链接数。
2.3.4 Partial PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于早已下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每位页面的PageRank值,计算完以后,将待抓取URL队列中的URL根据PageRank值的大小排列,并根据该次序抓取页面。
如果每次抓取一个页面,就重新估算PageRank值,一种折中方案是:每抓取K个页面后,重新估算一次PageRank值。但是此类情况都会有一个问题:对于早已下载出来的页面中剖析出的链接,也就是我们之前谈到的未知网页那一部分,暂时是没有PageRank值的。为了解决这个问题,会给那些页面一个临时的PageRank值:将这个网页所有入链传递进来的PageRank值进行汇总,这样就产生了该未知页面的PageRank值,从而参与排序。
2.3.5 OPIC策略策略
该算法实际上也是对页面进行一个重要性打分。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P以后,将P的现金平摊给所有从P中剖析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面根据现金数进行排序。
2.3.6 大站优先策略
对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。这个策略也因而称作大站优先策略。
3、爬虫分类
开发网路爬虫应当选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?上面说的爬虫,基本可以分3类:
(1)分布式爬虫:Nutch
(2)JAVA爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
3.1 分布式爬虫
爬虫使用分布式,主要是解决两个问题:
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的名气,当然最后的结果常常是项目延后完成。
如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或则es配合,就可以构成一套十分强悍的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch2.3发布再看。目前的Nutch2是一个极其不稳定的版本。
3.2 JAVA爬虫
这里把JAVA爬虫单独分为一类,是因为JAVA在网路爬虫这块的生态圈是十分健全的。相关的资料也是最全的。这里可能有争议,我只是随便谈谈。
其实开源网络爬虫(框架)的开发十分简单,难问题和复杂的问题都被原先的人解决了(比如DOM树解析和定位、字符集检查、海量URL去重),可以说是毫无技术浓度。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码十分简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是须要一段时间的调试和更改的。
对于爬虫的功能来说。用户比较关心的问题常常是:
1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么? 查看全部
1、爬虫技术2113概述
网络爬虫(Web crawler),是一种根据5261一定的规则,自动地抓取万4102维1653网信息的程序或则脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以手动采集所有其才能访问到的页面内容,以获取或更新那些网站的内容和检索方法。从功能上来讲,爬虫通常分为数据采集,处理,储存三个部份。
传统爬虫从一个或若干初始网页的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队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以里面的图为例:
遍历路径:A-B-C-D-E-F G H I
2.3.3 反向链接数策略
反向链接数是指一个网页被其他网页链接指向的数目。反向链接数表示的是一个网页的内容遭到其他人的推荐的程度。因此,很多时侯搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后次序。
在真实的网路环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那种也的重要程度。因此,搜索引擎常常考虑一些可靠的反向链接数。
2.3.4 Partial PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于早已下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每位页面的PageRank值,计算完以后,将待抓取URL队列中的URL根据PageRank值的大小排列,并根据该次序抓取页面。
如果每次抓取一个页面,就重新估算PageRank值,一种折中方案是:每抓取K个页面后,重新估算一次PageRank值。但是此类情况都会有一个问题:对于早已下载出来的页面中剖析出的链接,也就是我们之前谈到的未知网页那一部分,暂时是没有PageRank值的。为了解决这个问题,会给那些页面一个临时的PageRank值:将这个网页所有入链传递进来的PageRank值进行汇总,这样就产生了该未知页面的PageRank值,从而参与排序。
2.3.5 OPIC策略策略
该算法实际上也是对页面进行一个重要性打分。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P以后,将P的现金平摊给所有从P中剖析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面根据现金数进行排序。
2.3.6 大站优先策略
对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。这个策略也因而称作大站优先策略。
3、爬虫分类
开发网路爬虫应当选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?上面说的爬虫,基本可以分3类:
(1)分布式爬虫:Nutch
(2)JAVA爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
3.1 分布式爬虫
爬虫使用分布式,主要是解决两个问题:
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的名气,当然最后的结果常常是项目延后完成。
如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或则es配合,就可以构成一套十分强悍的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch2.3发布再看。目前的Nutch2是一个极其不稳定的版本。
3.2 JAVA爬虫
这里把JAVA爬虫单独分为一类,是因为JAVA在网路爬虫这块的生态圈是十分健全的。相关的资料也是最全的。这里可能有争议,我只是随便谈谈。
其实开源网络爬虫(框架)的开发十分简单,难问题和复杂的问题都被原先的人解决了(比如DOM树解析和定位、字符集检查、海量URL去重),可以说是毫无技术浓度。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码十分简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是须要一段时间的调试和更改的。
对于爬虫的功能来说。用户比较关心的问题常常是:
1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么?
开源爬虫框架大对比,你喜欢的框架在上面吗?
采集交流 • 优采云 发表了文章 • 0 个评论 • 298 次浏览 • 2020-05-07 08:01
介绍
大家好!我们从明天开始学习开源爬虫框架Scrapy,如果你看过《手把手》系列的前两篇,那么明天的内容就十分容易理解了。细心的读者或许会有疑问,为什么不学出身名门的Apache顶尖项目Nutch,或者人气激增的国外高手开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度:
这些框架都太优秀,都有好多用户,活跃度相对低的并不说明技术低,活跃度相对高的似乎只是多满足了一些用户需求。接下来我们还是要理智的对主流爬虫框架做一个对比剖析。
开源框架大PK
各路英雄早已到齐了, PK如今开始!
Nutch
介绍:
Nutch是一个开源的Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和网路爬虫。
尽管搜索是上网的基本要求,但是现有的搜索引擎的数量却在增长。并且这很有可能进一步演化成为一个公司垄断了几乎所有的网页搜索为其攫取商业利益。这似乎不利于广大Internet用户。
Nutch为我们提供了这样一个不同的选择。相对于这些商用的搜索引擎,Nutch作为开放源代码的搜索引擎将会愈发透明,从而更值得你们信赖。现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为何一个网页会排在一个特定的位置。除此之外, 有的搜索引擎根据网站所付的费用, 而不是依据它们本身的价值进行排序。与它们不同,Nutch没有哪些须要隐瞒,也没有动机去扭曲搜索的结果。Nutch将尽自己最大的努力为用户提供最好的搜索结果。
优点:
Nutch支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外太吸引人的一点在于,它提供了一种插件框架,使得其对各类网页内容的解析、各种数据的采集、查询、集群、过滤等功能才能便捷的进行扩充。正是因为有此框架,使得 Nutch 的插件开发特别容易,第三方的插件也层出不穷,极大的提高了 Nutch 的功能和声誉。
缺点:
对于大多数用户来说,一般是想做一个精确数据爬取的爬虫,就像第一篇里爬歌单那种“主题爬虫”。而第二篇介绍的“通用爬虫”适合做搜索引擎,这种需求就比较少。如果借此为标准,那么为搜索引擎而生的Nutch就有着天生缺点。Nutch的构架里大部分为搜索引擎而设计的,对精确爬取没有非常的考虑。也就是说,用Nutch做主题爬虫,会浪费好多的时间在不必要的估算上。而且假如你企图通过对Nutch进行二次开发来扩充其订制能力,基本上就要破坏Nutch的框架,反而不如自己写了。
Pyspider
介绍:
Pyspider是一个国人编撰的强悍的网路爬虫系统并带有强悍的WebUI。采用Python语言编撰,分布式构架,支持多种数据库前端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。
Pyspider的主要功能包括,抓取、更新调度多站点的特定的页面;需要对页面进行结构化信息提取;灵活可扩充开源爬虫框架,稳定可监控。满足了绝大多数Python爬虫的需求 —— 定向抓取,结构化化解析。但是面对结构迥异的各类网站,单一的抓取模式并不一定能满足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件常常不够灵活,于是,通过脚本去控制抓取成为了最后的选择。而去重调度,队列,抓取,异常处理,监控等功能作为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了最终的框架。
优点:
支持分布式布署。
完全可视化,对用户特别友好:WEB 界面编撰调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出。
简单开源爬虫框架,五分钟才能上手。脚本规则简单,开发效率高。
支持抓取JavaScript的页面。
总之,Pyspider十分强悍,强大到更象一个产品而不是一个框架。
缺点:
URL去重使用数据库而不是布隆过滤器,亿级储存的db io将造成效率大幅减低。
使用上的人性化牺牲了灵活度,定制化能力增加。
Scrapy
介绍:
Scrapy是一个为了爬取网站数据,提取结构性数据而编撰的应用框架。 可以应用在包括数据挖掘,信息处理或储存历史数据等一系列的程序中。Scrapy 使用 Twisted这个异步网路库来处理网路通信,架构清晰,并且包含了各类中间件插口,可以灵活的完成各类需求。Scratch,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧。
优点:
极其灵活的多样化爬取。
社区人数多、文档构建。
URL去重采用布隆过滤器方案。
可以处理不完整的HTML,Scrapy早已提供了selectors(一个在lxml的基础上提供了更中级的插口),可以高效地处理不完整的HTML代码。
缺点:
不支持分布式布署。
原生不支持抓取JavaScript的页面。
全命令行操作,对用户不友好,需要一定学习周期。
结论
篇幅有限,就先选择这三个最有代表性的框架进行PK。他们都有远超他人的优点,比如:Nutch天生的搜索引擎解决方案、Pyspider产品级的WebUI、Scrapy最灵活的多样化爬取。也都各自致命的缺点,比如Scrapy不支持分布式布署,Pyspider不够灵活,Nutch和搜索绑定。究竟该如何选择呢?
我们的目标是做纯粹的爬虫,不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可订制的Scrapy。Scrapy的灵活性几乎就能使我们完成任何严苛的抓取需求,它的“难用”也使我们不知不觉的研究爬虫技术。现在还不是享受Pyspider的时侯,目前的当务之急是打好基础,应该学习最接近爬虫本质的框架,了解它的原理,所以把Pyspider也排除掉。
最终,理性的从个人的需求角度对比,还是Scrapy胜出!其实Scrapy还有更多优点:
HTML, XML源数据选择及提取的原生支持。
提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了外置支持。
通过 feed导入 提供了多格式(JSON、CSV、XML),多储存前端(FTP、S3、本地文件系统)的外置支持。
提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。
高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来订制实现您的功能。
内置的中间件及扩充为下述功能提供了支持:
cookies and session 处理
HTTP 压缩
HTTP 认证
HTTP 缓存
user-agent模拟
robots.txt
爬取深度限制
针对非英语语族中不标准或则错误的编码申明, 提供了手动检查以及强壮的编码支持。
支持依照模板生成爬虫。在加速爬虫创建的同时,保持在小型项目中的代码更为一致。
针对多爬虫下性能评估、失败检查,提供了可扩充的 状态搜集工具 。
提供 交互式shell终端 , 为您测试XPath表达式,编写和调试爬虫提供了极大的便捷。
提供 System service, 简化在生产环境的布署及运行。
内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看而且调试爬虫。
Logging 为您在爬取过程中捕捉错误提供了便捷。
支持 Sitemaps 爬取。
具有缓存的DNS解析器。
查看全部

介绍
大家好!我们从明天开始学习开源爬虫框架Scrapy,如果你看过《手把手》系列的前两篇,那么明天的内容就十分容易理解了。细心的读者或许会有疑问,为什么不学出身名门的Apache顶尖项目Nutch,或者人气激增的国外高手开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度:
这些框架都太优秀,都有好多用户,活跃度相对低的并不说明技术低,活跃度相对高的似乎只是多满足了一些用户需求。接下来我们还是要理智的对主流爬虫框架做一个对比剖析。
开源框架大PK
各路英雄早已到齐了, PK如今开始!
Nutch
介绍:
Nutch是一个开源的Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和网路爬虫。
尽管搜索是上网的基本要求,但是现有的搜索引擎的数量却在增长。并且这很有可能进一步演化成为一个公司垄断了几乎所有的网页搜索为其攫取商业利益。这似乎不利于广大Internet用户。
Nutch为我们提供了这样一个不同的选择。相对于这些商用的搜索引擎,Nutch作为开放源代码的搜索引擎将会愈发透明,从而更值得你们信赖。现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为何一个网页会排在一个特定的位置。除此之外, 有的搜索引擎根据网站所付的费用, 而不是依据它们本身的价值进行排序。与它们不同,Nutch没有哪些须要隐瞒,也没有动机去扭曲搜索的结果。Nutch将尽自己最大的努力为用户提供最好的搜索结果。
优点:
Nutch支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外太吸引人的一点在于,它提供了一种插件框架,使得其对各类网页内容的解析、各种数据的采集、查询、集群、过滤等功能才能便捷的进行扩充。正是因为有此框架,使得 Nutch 的插件开发特别容易,第三方的插件也层出不穷,极大的提高了 Nutch 的功能和声誉。
缺点:
对于大多数用户来说,一般是想做一个精确数据爬取的爬虫,就像第一篇里爬歌单那种“主题爬虫”。而第二篇介绍的“通用爬虫”适合做搜索引擎,这种需求就比较少。如果借此为标准,那么为搜索引擎而生的Nutch就有着天生缺点。Nutch的构架里大部分为搜索引擎而设计的,对精确爬取没有非常的考虑。也就是说,用Nutch做主题爬虫,会浪费好多的时间在不必要的估算上。而且假如你企图通过对Nutch进行二次开发来扩充其订制能力,基本上就要破坏Nutch的框架,反而不如自己写了。
Pyspider
介绍:
Pyspider是一个国人编撰的强悍的网路爬虫系统并带有强悍的WebUI。采用Python语言编撰,分布式构架,支持多种数据库前端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。
Pyspider的主要功能包括,抓取、更新调度多站点的特定的页面;需要对页面进行结构化信息提取;灵活可扩充开源爬虫框架,稳定可监控。满足了绝大多数Python爬虫的需求 —— 定向抓取,结构化化解析。但是面对结构迥异的各类网站,单一的抓取模式并不一定能满足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件常常不够灵活,于是,通过脚本去控制抓取成为了最后的选择。而去重调度,队列,抓取,异常处理,监控等功能作为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了最终的框架。
优点:
支持分布式布署。
完全可视化,对用户特别友好:WEB 界面编撰调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出。
简单开源爬虫框架,五分钟才能上手。脚本规则简单,开发效率高。
支持抓取JavaScript的页面。
总之,Pyspider十分强悍,强大到更象一个产品而不是一个框架。
缺点:
URL去重使用数据库而不是布隆过滤器,亿级储存的db io将造成效率大幅减低。
使用上的人性化牺牲了灵活度,定制化能力增加。
Scrapy
介绍:
Scrapy是一个为了爬取网站数据,提取结构性数据而编撰的应用框架。 可以应用在包括数据挖掘,信息处理或储存历史数据等一系列的程序中。Scrapy 使用 Twisted这个异步网路库来处理网路通信,架构清晰,并且包含了各类中间件插口,可以灵活的完成各类需求。Scratch,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧。
优点:
极其灵活的多样化爬取。
社区人数多、文档构建。
URL去重采用布隆过滤器方案。
可以处理不完整的HTML,Scrapy早已提供了selectors(一个在lxml的基础上提供了更中级的插口),可以高效地处理不完整的HTML代码。
缺点:
不支持分布式布署。
原生不支持抓取JavaScript的页面。
全命令行操作,对用户不友好,需要一定学习周期。
结论
篇幅有限,就先选择这三个最有代表性的框架进行PK。他们都有远超他人的优点,比如:Nutch天生的搜索引擎解决方案、Pyspider产品级的WebUI、Scrapy最灵活的多样化爬取。也都各自致命的缺点,比如Scrapy不支持分布式布署,Pyspider不够灵活,Nutch和搜索绑定。究竟该如何选择呢?
我们的目标是做纯粹的爬虫,不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可订制的Scrapy。Scrapy的灵活性几乎就能使我们完成任何严苛的抓取需求,它的“难用”也使我们不知不觉的研究爬虫技术。现在还不是享受Pyspider的时侯,目前的当务之急是打好基础,应该学习最接近爬虫本质的框架,了解它的原理,所以把Pyspider也排除掉。
最终,理性的从个人的需求角度对比,还是Scrapy胜出!其实Scrapy还有更多优点:
HTML, XML源数据选择及提取的原生支持。
提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了外置支持。
通过 feed导入 提供了多格式(JSON、CSV、XML),多储存前端(FTP、S3、本地文件系统)的外置支持。
提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。
高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来订制实现您的功能。
内置的中间件及扩充为下述功能提供了支持:
cookies and session 处理
HTTP 压缩
HTTP 认证
HTTP 缓存
user-agent模拟
robots.txt
爬取深度限制
针对非英语语族中不标准或则错误的编码申明, 提供了手动检查以及强壮的编码支持。
支持依照模板生成爬虫。在加速爬虫创建的同时,保持在小型项目中的代码更为一致。
针对多爬虫下性能评估、失败检查,提供了可扩充的 状态搜集工具 。
提供 交互式shell终端 , 为您测试XPath表达式,编写和调试爬虫提供了极大的便捷。
提供 System service, 简化在生产环境的布署及运行。
内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看而且调试爬虫。
Logging 为您在爬取过程中捕捉错误提供了便捷。
支持 Sitemaps 爬取。
具有缓存的DNS解析器。
开源爬虫框架各有哪些优缺点
采集交流 • 优采云 发表了文章 • 0 个评论 • 385 次浏览 • 2020-05-04 08:06
分布式爬虫:Nutch
JAVA单机爬虫:Crawler4j,WebMagic,WebCollector
非JAVA单机爬虫:scrapy
海量URL管理
网速快
Nutch是为搜索引擎设计的爬虫,大多数用户是须要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有很大的意义。
用Nutch做数据抽取,会浪费好多的时间在不必要的估算上。而且假如你企图通过对Nutch进行二次开发,来促使它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非。
Nutch依赖hadoop运行,hadoop本身会消耗好多的时间。如果集群机器数目较少,爬取速率反倒不如单机爬虫。
Nutch似乎有一套插件机制,而且作为亮点宣传。可以看见一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都晓得,Nutch的插件系统有多拙劣。利用反射的机制来加载和调用插件,使得程序的编撰和调试都显得异常困难,更别说在里面开发一套复杂的精抽取系统了。
Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的开源爬虫框架,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点虽然是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text)
用Nutch进行爬虫的二次开发,爬虫的编撰和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要使一个团队的人都看懂Nutch源码。调试过程中会出现除程序本身之外的各类问题(hadoop的问题、hbase的问题)。
Nutch2的版本目前并不适宜开发。官方如今稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。Nutch2.3之前、Nutch2.2.1以后的一个版本,这个版本在官方的SVN中不断更新。而且十分不稳定(一e799bee5baa6e997aee7ad94e78988e69d8331333363396465直在更改)。
支持多线程。
支持代理。
能过滤重复URL的。
负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往须要通过模拟浏览器(htmlunit,selenium)来完成。
先说python爬虫,python可以用30行代码,完成JAVA
50行代码干的任务。python写代码的确快开源爬虫框架,但是在调试代码的阶段,python代码的调试常常会花费远远少于编码阶段市下的时间。
使用python开发,要保证程序的正确性和稳定性,就须要写更多的测试模块。当然若果爬取规模不大、爬取业务不复杂,使用scrapy这些爬虫也是挺不错的,可以轻松完成爬取任务。
bug较多,不稳定。
网页上有一些异步加载的数据,爬取这种数据有两种方式:使用模拟浏览器(问题1中描述过了),或者剖析ajax的http请求,自己生成ajax恳求的url,获取返回的数据。如果是自己生成ajax恳求,使用开源爬虫的意义在那里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。
爬虫常常都是设计成广度遍历或则深度遍历的模式,去遍历静态或则动态页面。爬取ajax信息属于deepweb(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方式来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。简单来说,就是将生成的ajax恳求作为种子,放入爬虫。用爬虫对那些种子,进行深度为1的广度遍历(默认就是广度遍历)。
这些开源爬虫都支持在爬取时指定cookies,模拟登录主要是靠cookies。至于cookies如何获取,不是爬虫管的事情。你可以自动获取、用http请求模拟登录或则用模拟浏览器手动登入获取cookie。
开源爬虫通常还会集成网页抽取工具。主要支持两种规范:CSSSELECTOR和XPATH。
爬虫的调用是在Web的服务端调用的,平时如何用就如何用,这些爬虫都可以使用。
单机开源爬虫的速率,基本都可以讲本机的网速用到极限。爬虫的速率慢,往往是由于用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速率慢。而这种东西,往往都是用户的机器和二次开发的代码决定的。这些开源爬虫的速率,都太可以。 查看全部
分布式爬虫:Nutch
JAVA单机爬虫:Crawler4j,WebMagic,WebCollector
非JAVA单机爬虫:scrapy
海量URL管理
网速快
Nutch是为搜索引擎设计的爬虫,大多数用户是须要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有很大的意义。
用Nutch做数据抽取,会浪费好多的时间在不必要的估算上。而且假如你企图通过对Nutch进行二次开发,来促使它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非。
Nutch依赖hadoop运行,hadoop本身会消耗好多的时间。如果集群机器数目较少,爬取速率反倒不如单机爬虫。
Nutch似乎有一套插件机制,而且作为亮点宣传。可以看见一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都晓得,Nutch的插件系统有多拙劣。利用反射的机制来加载和调用插件,使得程序的编撰和调试都显得异常困难,更别说在里面开发一套复杂的精抽取系统了。
Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的开源爬虫框架,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点虽然是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text)
用Nutch进行爬虫的二次开发,爬虫的编撰和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要使一个团队的人都看懂Nutch源码。调试过程中会出现除程序本身之外的各类问题(hadoop的问题、hbase的问题)。
Nutch2的版本目前并不适宜开发。官方如今稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。Nutch2.3之前、Nutch2.2.1以后的一个版本,这个版本在官方的SVN中不断更新。而且十分不稳定(一e799bee5baa6e997aee7ad94e78988e69d8331333363396465直在更改)。
支持多线程。
支持代理。
能过滤重复URL的。
负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往须要通过模拟浏览器(htmlunit,selenium)来完成。
先说python爬虫,python可以用30行代码,完成JAVA
50行代码干的任务。python写代码的确快开源爬虫框架,但是在调试代码的阶段,python代码的调试常常会花费远远少于编码阶段市下的时间。
使用python开发,要保证程序的正确性和稳定性,就须要写更多的测试模块。当然若果爬取规模不大、爬取业务不复杂,使用scrapy这些爬虫也是挺不错的,可以轻松完成爬取任务。
bug较多,不稳定。
网页上有一些异步加载的数据,爬取这种数据有两种方式:使用模拟浏览器(问题1中描述过了),或者剖析ajax的http请求,自己生成ajax恳求的url,获取返回的数据。如果是自己生成ajax恳求,使用开源爬虫的意义在那里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。
爬虫常常都是设计成广度遍历或则深度遍历的模式,去遍历静态或则动态页面。爬取ajax信息属于deepweb(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方式来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。简单来说,就是将生成的ajax恳求作为种子,放入爬虫。用爬虫对那些种子,进行深度为1的广度遍历(默认就是广度遍历)。
这些开源爬虫都支持在爬取时指定cookies,模拟登录主要是靠cookies。至于cookies如何获取,不是爬虫管的事情。你可以自动获取、用http请求模拟登录或则用模拟浏览器手动登入获取cookie。
开源爬虫通常还会集成网页抽取工具。主要支持两种规范:CSSSELECTOR和XPATH。
爬虫的调用是在Web的服务端调用的,平时如何用就如何用,这些爬虫都可以使用。
单机开源爬虫的速率,基本都可以讲本机的网速用到极限。爬虫的速率慢,往往是由于用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速率慢。而这种东西,往往都是用户的机器和二次开发的代码决定的。这些开源爬虫的速率,都太可以。
主流开源爬虫框架比较与剖析
采集交流 • 优采云 发表了文章 • 0 个评论 • 327 次浏览 • 2020-07-03 08:01
2.1 网路爬虫的组成部分主流爬虫框架一般由以下部份组成:1. 种子URL库:URL用于定位互联网中的各种资源,如最常见的网页链接,还有常见的文件资源、流媒体资源等。种子URL库作为网络爬虫的入口,标识出爬虫应当从何处开始运行,指明了数据来源。2.数据下载器:针对不同的数据种类,需要不同的下载形式。主流爬虫框架通畅提供多种数据下载器,用来下载不同的资源,如静态网页下载器、动态网页下载器、FTP下载器等。3.过滤器:对于早已爬取的URL,智能的爬虫须要对其进行过滤,以提升爬虫的整体效率。常用的过滤器有基于集合的过滤器、基于布隆过滤的过滤器等。4.流程调度器:合理的调度爬取流程,也可以提升爬虫的整体效率。在流程调度器中,通常提供深度优先爬取、广度优先爬取、订制爬取等爬取策略。同时提供单线程、多线程等多种爬取方法。2.2 网络爬虫的爬取策略网路爬虫的爬取策略,可以更高效的组织爬虫的爬取过程。常见的爬取策略包括深度优先爬取、深度优先爬取、订制爬取等策略等。1.深度优先爬取:该策略在爬取每位URL资源后,会随机爬取改URL对应的所有子URL资源,直到全部子URL资源全部爬取完毕,再爬取下一个URL资源。
深度优先爬取更关注数据的深度,希望通过爬取更多的子URL资源,来获取更深层次的数据。2.广度优先爬取:该策略在爬取配个URL资源时,会继续爬取同层次的其他URL资源,当本层的URL资源都被爬取完毕后,再爬取下一次URL资源。广度优先爬取更关注数据的广度,这样可以囊括更全面的数据。3.订制爬取:再好多场景中,深度优先爬取或广度优先爬取未能满足复杂的数据采集需求,此时须要定制爬取策略,如垂直搜索策略,先通过制订关键词进行搜索后开源爬虫框架,再结合深度优先爬取或广度优先爬取,才可以获取到垂直领域的特定数据。2.3 爬虫的增量爬取从数据的角度看,有些爬虫只进行单次的爬取操作,而有些爬虫须要进行增量爬取,用来积累数据。对于单次爬取的网路爬虫,实现较为简单,因为不用考虑过滤去重等操作,所以模块相对较少。单次爬取的爬虫主要考虑爬取的效率,有时会通过多线程或多进程等形式提升爬取效率。对于须要增量爬取的网路爬虫。通常须要对URL链接、资源内容等进行过滤和去重。每次爬取的时侯,需要对比数据是否重复,并将早已爬取过的内容过滤掉,从而降低冗余数据的爬取和储存。实际应用中,增量爬虫的使用较为广泛。3.主流开源爬虫框架爬虫技术发展至今,已经非常成熟,同时也形成了好多开源的爬虫框架,入Nutch、Heritrix、Larbin、Scrapy,这些开源框架的实现语言与功能各不相同,以下是这几款开源爬虫框架的比较与剖析。
3.1 NutchNutch是一个比较小型的开源框架,也是隶属于Apache基金会的一个开源项目。Nutch最初服务于Lucene项目,Lucene是一个完整的搜索引擎框架,其中Nutch提供数据爬取服务。因为Lucene是一个通用的搜索引擎框架,所以Nutch在设计之初也主要用于通用数据的爬取。在满足通用需求的同时,Nutch牺牲了一些多样化开发的特点。优点:Nutch适用于各类规模的爬取任务,底层可以和Hadoop平台对接,提供分布式的爬取功能,同时支持分布式的调度及分布式的储存。为了扩充各种多样化功能,Nutch设计了插件框架,可以通过添加插件,来实现愈发复杂的爬取功能。缺点:虽然有插件框架,但是Nutch的多样化开发成本仍然较高。 在使用默认的配置过滤文件是,是不抓取动态网页的,要想爬取动态网页须要更改过滤规则。3.2 HeritrixHeritrix是基于Java语言的爬虫框架,因其可扩展型和丰富的各种组件而闻名。但配置相对繁杂,所以学习成本过高。Heritrix提供了多种下载器,用于下载网页、流媒体等多种类型的数据。Heritrix还提供了图形界面拿来管理爬虫,可以通过网页来启动货控制各种爬虫。
优点:Heritrix的爬虫订制参数多包括,可设置输出日志、可设置多线程采集模式、可设置下载速率上限等 开发者可以通过更改组件的参数,来高效的更改爬虫功能 。缺点:Heritrix很难实现分布式爬取,因为多个单独爬虫之间,无法合作完成爬取任务,可扩展性较差。在爬取失败时,也缺少重万方数据 67 ELECTRONICS WORLD 探求与观察工作台处于清洁的状态,并监督工作人员防静电腕带的配戴情况,且使用的钳子须要具有防静电的功能,或者在取料的时侯利用真空吸笔完成,放置静电在元器件于手接触时形成,第四,定期对相关设施进行防静电测试处理 [6] 。二、SMT表面贴装技术的发展趋势近些年来,我国科学技术水平在社会经济快速发展的影响下得到了迅猛发展,表面贴装技术在此背景下也获得了宽广的发展空间,并将会以小型化、精细化的方向不断发展。针对SMT表面贴装技术的发展趋势进行剖析可以发觉,在未来的发展过程中,将会大幅度缩小SDC/SMD的容积,并其而不断扩大其生产数目,就现阶段表面贴装技术的发展现况而言,将0603以及1005型表面贴膜式电容和内阻商品化的目的已然实现。同时,集成电路的发展方向将会是小型化和STM化,现阶段,市场上早已出现了腿宽度为0.3mm的IC业,其发展方向将是BGA。
此外,焊接技术也将会逐步趋向成熟阶段,惰性气体于1994年便早已被点焊设备厂家制造下来以满足回流焊以及波峰焊的需求。与此同时免清洗工业也涌现下来但是应用非常广泛。最后,测试设备以及贴片设备的效率将会大幅度提高,且灵活性也会不断增强。目前,在使用SMT技术的时侯,其贴片速率大概在5500片/h左右,通过使用高柔化和智能化的贴片系统促使制造商的生产成品被大幅度增加,进而促使生产效率以及精度的提高,并且丰富了贴片的功能 [7] 。三、结束语与传统的THT而言,SMT的优势主要表现在其性能好、组装密度高以及体积小和可靠性强等方面,受到其上述优势的影响,现阶段电子设备以及电子产品的装配技术均以SMT为主,并且在电子产品的生产制造领域得到广泛应用。尽管在实际应用的时侯,SMT仍然表现出一些不足之处,但是与其所发挥的正面影响对比,这些不足并不影响该技术应用价值。所以,需要加强SMT技术的宣传力度,促进其应用可以覆盖更多领域。与此同时,还须要加到对该技术的研究力度,对其各项工艺流程给以建立,促进其所用得到充分发挥,继而有助于电子产品工艺制程清洁化、装备模块化、生产集成化和自动化的愿景尽快实现,为电子行业的可持续发展提供可靠保障。
参考文献[1] 杨柳.SMT表面贴装技术工艺应用实践[J].科研,2016(8):00079-00079.[2]孙丹妮,周娟,耿豪凯,等.累积和与指数加权移动平均控制图在表面贴装技术中的应用及仿真[J].机械制造,2017,55(3):77-80.[3]朱飞飞.谈电子工业中SMT技术的工艺研究和发展趋势[J].科研,2016(8):00286-00286.[4] 高文璇.Protel DXP技术与SMT技术在现今电子产业中的应用[J].电子世 界,2014(6):95-95.[5]王婷,方子正.SMD型表面贴装元件壳体生产中技术难点和解决举措[J].工程技术:全文版,2016(7):00253-00253.[6]周超.阐述SMT表面贴装技术工艺应用与发展趋势[J].科研,2016(12):00008-00008.[7]李金明.电子工业中SMT技术工艺研究及发展趋势[J].电子技术与软件工程,2016(13):139-139.(上接第65页)试等机制,导致开发者须要做好多额外工作来填补那些设计上的缺位。不同于Nutch框架开源爬虫框架,仅凭Heritrix不能完成搜索引擎的全部工作,而只能完成爬虫阶段的爬取工作。
3.3 LarbinLarbin是一个基于C++语言的爬虫框架。Larbin提供了相对简单单非常易用的爬虫功能。单机Larbin爬虫可以每晚获取百万量级的网页。单Larbin不提供网页解析服务,也不考虑内容的储存及处理。如果象使用Larbin进行小型系统的实现,则须要自行开发相应的其他组件。优点:指定入口URL后,可以手动扩充,甚至整个网站镜像;支持通过后缀名对抓取网页进行过滤;只保存原始网页;利用C++开发,非常高效。缺点:只有网页下载器,而没有网页解析器。不支持分布式爬取。没有手动重试功能。该项目在2003年后停止开发维护。 3.4 ScrapyScrapy是基于python语言开发的爬虫框架,由于它的轻量化设计和简单易用,而广泛遭到开发者的欢迎。优点:简单易用:只需编撰爬取规则,剩下由scrapy完成易扩充:扩展性设计,支持插件,无需改动核心代码可移植性:基于Linux、Windows、Mac、BSD开发和运行设计。缺点:单机多线程实现,不支持分布式。数据储存方案支持 Local fi lesystem、FTP、S3、Standard output,默认无分布式存储解决方案默认中间过程网页不会保存,只保存抽取结果。
4.总结与展望本文首先介绍了URL链接库、文档内容模块、文档解析模块等爬虫基础概念,然后对比剖析了Nutch、Heritrix、Larbin、Scrapy等主流开源爬虫框架。不同的爬虫开源框架的实现语言和功能不同,适用的场景也不尽相同,需要在实际应用中选择合适的开源爬虫框架。参考文献[1]刘玮玮.搜索引擎中主题爬虫的研究与实现[D].南京理工大学,2006.[2]詹恒飞,杨岳湘,方宏.Nutch分布式网路爬虫研究与优化[J].计算机科学与探求,2011,5(01):68-74.[3]安子建.基于Scrapy框架的网路爬虫实现与数据抓取剖析[D].吉林大学,2017.[4]周立柱,林玲.聚焦爬虫技术研究综述[J].计算机应用,2005(09):1965-1969.[5]杨定中,赵刚,王泰.网络爬虫在Web信息搜索与数据挖掘中应用[J].计算机工程与设计,2009,30(24):5658-5662.万方数据 查看全部
65 ELECTRONICS WORLD 探求与观察(下转第67页)主流开源爬虫框架比较与剖析北京工商大学 刘 雯【摘要】网络爬虫是搜索引擎与信息检索的基础工具,在信息采集、信息过滤等场景中有着广泛的应用。本文首先介绍了URL链接库、文档内容模块、文档解析模块等爬虫基础概念,然后对比剖析了Nutch、Heritrix、Larbin、Scrapy等主流开源爬虫框架。【关键词】网络爬虫;数据采集;搜索引擎1.引言近些年来,随着互联网的高速发展,网络中的数据呈现出了爆炸式的下降,如何搜集整合这种数据并从中提取出有效的信息,引发了多方面的挑战。面对这种挑战,爬虫技术得到了充分的注重。开源网路爬虫框架促使爬虫的开发与应用变的高效方便。各个开源爬虫框架的实现语言与功能不完全相同,适用场景也不尽相同,需要对比不同开源爬虫框架之间的好坏。2.爬虫的相关概念网路爬虫是用于互联网采集的一种工具,通常又被称为网路机器人。在数据挖掘、信息检索等领域,网络爬虫被广泛使用,从而获取最原始的数据。网络爬虫也是信息检索和搜索引擎的重要组成部份,通过网路爬虫采集到的信息,经过搜索引擎的整合,可以更好的用于检索。
2.1 网路爬虫的组成部分主流爬虫框架一般由以下部份组成:1. 种子URL库:URL用于定位互联网中的各种资源,如最常见的网页链接,还有常见的文件资源、流媒体资源等。种子URL库作为网络爬虫的入口,标识出爬虫应当从何处开始运行,指明了数据来源。2.数据下载器:针对不同的数据种类,需要不同的下载形式。主流爬虫框架通畅提供多种数据下载器,用来下载不同的资源,如静态网页下载器、动态网页下载器、FTP下载器等。3.过滤器:对于早已爬取的URL,智能的爬虫须要对其进行过滤,以提升爬虫的整体效率。常用的过滤器有基于集合的过滤器、基于布隆过滤的过滤器等。4.流程调度器:合理的调度爬取流程,也可以提升爬虫的整体效率。在流程调度器中,通常提供深度优先爬取、广度优先爬取、订制爬取等爬取策略。同时提供单线程、多线程等多种爬取方法。2.2 网络爬虫的爬取策略网路爬虫的爬取策略,可以更高效的组织爬虫的爬取过程。常见的爬取策略包括深度优先爬取、深度优先爬取、订制爬取等策略等。1.深度优先爬取:该策略在爬取每位URL资源后,会随机爬取改URL对应的所有子URL资源,直到全部子URL资源全部爬取完毕,再爬取下一个URL资源。
深度优先爬取更关注数据的深度,希望通过爬取更多的子URL资源,来获取更深层次的数据。2.广度优先爬取:该策略在爬取配个URL资源时,会继续爬取同层次的其他URL资源,当本层的URL资源都被爬取完毕后,再爬取下一次URL资源。广度优先爬取更关注数据的广度,这样可以囊括更全面的数据。3.订制爬取:再好多场景中,深度优先爬取或广度优先爬取未能满足复杂的数据采集需求,此时须要定制爬取策略,如垂直搜索策略,先通过制订关键词进行搜索后开源爬虫框架,再结合深度优先爬取或广度优先爬取,才可以获取到垂直领域的特定数据。2.3 爬虫的增量爬取从数据的角度看,有些爬虫只进行单次的爬取操作,而有些爬虫须要进行增量爬取,用来积累数据。对于单次爬取的网路爬虫,实现较为简单,因为不用考虑过滤去重等操作,所以模块相对较少。单次爬取的爬虫主要考虑爬取的效率,有时会通过多线程或多进程等形式提升爬取效率。对于须要增量爬取的网路爬虫。通常须要对URL链接、资源内容等进行过滤和去重。每次爬取的时侯,需要对比数据是否重复,并将早已爬取过的内容过滤掉,从而降低冗余数据的爬取和储存。实际应用中,增量爬虫的使用较为广泛。3.主流开源爬虫框架爬虫技术发展至今,已经非常成熟,同时也形成了好多开源的爬虫框架,入Nutch、Heritrix、Larbin、Scrapy,这些开源框架的实现语言与功能各不相同,以下是这几款开源爬虫框架的比较与剖析。
3.1 NutchNutch是一个比较小型的开源框架,也是隶属于Apache基金会的一个开源项目。Nutch最初服务于Lucene项目,Lucene是一个完整的搜索引擎框架,其中Nutch提供数据爬取服务。因为Lucene是一个通用的搜索引擎框架,所以Nutch在设计之初也主要用于通用数据的爬取。在满足通用需求的同时,Nutch牺牲了一些多样化开发的特点。优点:Nutch适用于各类规模的爬取任务,底层可以和Hadoop平台对接,提供分布式的爬取功能,同时支持分布式的调度及分布式的储存。为了扩充各种多样化功能,Nutch设计了插件框架,可以通过添加插件,来实现愈发复杂的爬取功能。缺点:虽然有插件框架,但是Nutch的多样化开发成本仍然较高。 在使用默认的配置过滤文件是,是不抓取动态网页的,要想爬取动态网页须要更改过滤规则。3.2 HeritrixHeritrix是基于Java语言的爬虫框架,因其可扩展型和丰富的各种组件而闻名。但配置相对繁杂,所以学习成本过高。Heritrix提供了多种下载器,用于下载网页、流媒体等多种类型的数据。Heritrix还提供了图形界面拿来管理爬虫,可以通过网页来启动货控制各种爬虫。
优点:Heritrix的爬虫订制参数多包括,可设置输出日志、可设置多线程采集模式、可设置下载速率上限等 开发者可以通过更改组件的参数,来高效的更改爬虫功能 。缺点:Heritrix很难实现分布式爬取,因为多个单独爬虫之间,无法合作完成爬取任务,可扩展性较差。在爬取失败时,也缺少重万方数据 67 ELECTRONICS WORLD 探求与观察工作台处于清洁的状态,并监督工作人员防静电腕带的配戴情况,且使用的钳子须要具有防静电的功能,或者在取料的时侯利用真空吸笔完成,放置静电在元器件于手接触时形成,第四,定期对相关设施进行防静电测试处理 [6] 。二、SMT表面贴装技术的发展趋势近些年来,我国科学技术水平在社会经济快速发展的影响下得到了迅猛发展,表面贴装技术在此背景下也获得了宽广的发展空间,并将会以小型化、精细化的方向不断发展。针对SMT表面贴装技术的发展趋势进行剖析可以发觉,在未来的发展过程中,将会大幅度缩小SDC/SMD的容积,并其而不断扩大其生产数目,就现阶段表面贴装技术的发展现况而言,将0603以及1005型表面贴膜式电容和内阻商品化的目的已然实现。同时,集成电路的发展方向将会是小型化和STM化,现阶段,市场上早已出现了腿宽度为0.3mm的IC业,其发展方向将是BGA。
此外,焊接技术也将会逐步趋向成熟阶段,惰性气体于1994年便早已被点焊设备厂家制造下来以满足回流焊以及波峰焊的需求。与此同时免清洗工业也涌现下来但是应用非常广泛。最后,测试设备以及贴片设备的效率将会大幅度提高,且灵活性也会不断增强。目前,在使用SMT技术的时侯,其贴片速率大概在5500片/h左右,通过使用高柔化和智能化的贴片系统促使制造商的生产成品被大幅度增加,进而促使生产效率以及精度的提高,并且丰富了贴片的功能 [7] 。三、结束语与传统的THT而言,SMT的优势主要表现在其性能好、组装密度高以及体积小和可靠性强等方面,受到其上述优势的影响,现阶段电子设备以及电子产品的装配技术均以SMT为主,并且在电子产品的生产制造领域得到广泛应用。尽管在实际应用的时侯,SMT仍然表现出一些不足之处,但是与其所发挥的正面影响对比,这些不足并不影响该技术应用价值。所以,需要加强SMT技术的宣传力度,促进其应用可以覆盖更多领域。与此同时,还须要加到对该技术的研究力度,对其各项工艺流程给以建立,促进其所用得到充分发挥,继而有助于电子产品工艺制程清洁化、装备模块化、生产集成化和自动化的愿景尽快实现,为电子行业的可持续发展提供可靠保障。
参考文献[1] 杨柳.SMT表面贴装技术工艺应用实践[J].科研,2016(8):00079-00079.[2]孙丹妮,周娟,耿豪凯,等.累积和与指数加权移动平均控制图在表面贴装技术中的应用及仿真[J].机械制造,2017,55(3):77-80.[3]朱飞飞.谈电子工业中SMT技术的工艺研究和发展趋势[J].科研,2016(8):00286-00286.[4] 高文璇.Protel DXP技术与SMT技术在现今电子产业中的应用[J].电子世 界,2014(6):95-95.[5]王婷,方子正.SMD型表面贴装元件壳体生产中技术难点和解决举措[J].工程技术:全文版,2016(7):00253-00253.[6]周超.阐述SMT表面贴装技术工艺应用与发展趋势[J].科研,2016(12):00008-00008.[7]李金明.电子工业中SMT技术工艺研究及发展趋势[J].电子技术与软件工程,2016(13):139-139.(上接第65页)试等机制,导致开发者须要做好多额外工作来填补那些设计上的缺位。不同于Nutch框架开源爬虫框架,仅凭Heritrix不能完成搜索引擎的全部工作,而只能完成爬虫阶段的爬取工作。
3.3 LarbinLarbin是一个基于C++语言的爬虫框架。Larbin提供了相对简单单非常易用的爬虫功能。单机Larbin爬虫可以每晚获取百万量级的网页。单Larbin不提供网页解析服务,也不考虑内容的储存及处理。如果象使用Larbin进行小型系统的实现,则须要自行开发相应的其他组件。优点:指定入口URL后,可以手动扩充,甚至整个网站镜像;支持通过后缀名对抓取网页进行过滤;只保存原始网页;利用C++开发,非常高效。缺点:只有网页下载器,而没有网页解析器。不支持分布式爬取。没有手动重试功能。该项目在2003年后停止开发维护。 3.4 ScrapyScrapy是基于python语言开发的爬虫框架,由于它的轻量化设计和简单易用,而广泛遭到开发者的欢迎。优点:简单易用:只需编撰爬取规则,剩下由scrapy完成易扩充:扩展性设计,支持插件,无需改动核心代码可移植性:基于Linux、Windows、Mac、BSD开发和运行设计。缺点:单机多线程实现,不支持分布式。数据储存方案支持 Local fi lesystem、FTP、S3、Standard output,默认无分布式存储解决方案默认中间过程网页不会保存,只保存抽取结果。
4.总结与展望本文首先介绍了URL链接库、文档内容模块、文档解析模块等爬虫基础概念,然后对比剖析了Nutch、Heritrix、Larbin、Scrapy等主流开源爬虫框架。不同的爬虫开源框架的实现语言和功能不同,适用的场景也不尽相同,需要在实际应用中选择合适的开源爬虫框架。参考文献[1]刘玮玮.搜索引擎中主题爬虫的研究与实现[D].南京理工大学,2006.[2]詹恒飞,杨岳湘,方宏.Nutch分布式网路爬虫研究与优化[J].计算机科学与探求,2011,5(01):68-74.[3]安子建.基于Scrapy框架的网路爬虫实现与数据抓取剖析[D].吉林大学,2017.[4]周立柱,林玲.聚焦爬虫技术研究综述[J].计算机应用,2005(09):1965-1969.[5]杨定中,赵刚,王泰.网络爬虫在Web信息搜索与数据挖掘中应用[J].计算机工程与设计,2009,30(24):5658-5662.万方数据
java爬虫技术
采集交流 • 优采云 发表了文章 • 0 个评论 • 256 次浏览 • 2020-06-27 08:00
jsoup
HeritrixNutch
java 抓取网页内容
爬虫
java 爬虫比较
Nutch
开发语言:Java
简介:
Apache的子项目之一,属于Lucene项目下的子项目。
Nutch是一个基于Lucene,类似Google的完整网路搜索引擎解决方案,基于Hadoop的分布式处理模型保证了系统的性能,类似Eclipse的插件机制保证了系统的可客户化,而且很容易集成到自己的应用之中。
Larbin
开发语言:C++
简介
larbin是一种开源的网路爬虫/网路蜘蛛,由美国的年轻人 Sébastien Ailleret独立开发。larbin目的是能否跟踪页面的url进行扩充的抓取,最后为搜索引擎提供广泛的数据来源。
Larbin只是一个爬虫,也就是说larbin只抓取网页,至于怎样parse的事情则由用户自己完成。另外,如何储存到数据库以及完善索引的事情 larbin也不提供。
latbin最初的设计也是根据设计简单而且高度可配置性的原则,因此我们可以看见,一个简单的larbin的爬虫可以每晚获取500万的网页,非常高效。
Heritrix
开发语言:Java
简介
与Nutch比较
和 Nutch。二者均为Java开源框架,Heritrix是 SourceForge上的开源产品,Nutch为Apache的一个子项目,它们都叫做网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这种资源抓取到本地,使用的技巧都是剖析网站每一个有效的URI,并递交Http请求,从而获得相应结果,生成本地文件及相应的日志信息等。
Heritrix是个 “archival crawler” — 用来获取完整的、精确的、站点内容的深度复制。包括获取图象以及其他非文本内容。抓取并储存相关的内容。对内容来者不拒,不对页面进行内容上的更改。重新爬行对相同的URL不针对原先的进行替换。爬虫通过Web用户界面启动、监控、调整,允许弹性的定义要获取的URL。
二者的差别:
Nutch 只获取并保存可索引的内容。Heritrix则是照单全收。力求保存页面原样
Nutch 可以修剪内容,或者对内容格式进行转换。
Nutch 保存内容为数据库优化格式以便之后索引;刷新替换旧的内容。而Heritrix是添加(追加)新的内容。
Nutch 从命令行运行、控制。Heritrix有 Web 控制管理界面。
Nutch 的订制能力不够强,不过现今早已有了一定改进。Heritrix可控制的参数更多。
Heritrix提供的功能没有nutch多,有点整站下载的气味。既没有索引又没有解析,甚至对于重复爬取URL都处理不是挺好。
Heritrix的功能强悍 但是配置上去却有点麻烦。
其他网路爬虫介绍:
WebLech
WebLech是一个功能强悍的Web站点下载与镜像工具。它支持按功能需求来下载web站点并才能尽可能模仿标准Web浏览器的行为。WebLech有一个功能控制台并采用多线程操作。
Arale
Arale主要为个人使用而设计,而没有象其它爬虫一样是关注于页面索引。Arale才能下载整个web站点或来自web站点的个别资源。Arale能够够把动态页面映射成静态页面。
J-Spider
J-Spider:是一个完全可配置和订制的Web Spider引擎.你可以借助它来检测网站的错误(内在的服务器错误等),网站内外部链接检测java爬虫技术,分析网站的结构(可创建一个网站地图),下载整个Web站点,你还可以写一个JSpider插件来扩充你所须要的功能。
spindle
spindle 是一个建立在Lucene工具包之上的Web索引/搜索工具.它包括一个用于创建索引的HTTP spider和一个用于搜索这种索引的搜索类。spindle项目提供了一组JSP标签库促使这些基于JSP的站点不需要开发任何Java类能够够降低搜索功能。
Arachnid
Arachnid: 是一个基于Java的web spider框架.它包含一个简单的HTML剖析器才能剖析包含HTML内容的输入流.通过实现Arachnid的泛型才能够开发一个简单的Web spiders并才能在Web站上的每位页面被解析然后降低几行代码调用。 Arachnid的下载包中包含两个spider应用程序事例用于演示怎么使用该框架。
LARM
LARM才能为Jakarta Lucene搜索引擎框架的用户提供一个纯Java的搜索解决方案。它包含才能为文件,数据库表格构建索引的方式和为Web站点建索引的爬虫。
JoBo
JoBo 是一个用于下载整个Web站点的简单工具。它本质是一个Web Spider。与其它下载工具相比较它的主要优势是能否手动填充form(如:自动登入)和使用cookies来处理session。JoBo还有灵活的下载规则(如:通过网页的URL,大小,MIME类型等)来限制下载。
snoics-reptile
snoics-reptile是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口,把这个网站所有的能用浏览器通过GET的方法获取到的资源全部抓取到本地,包括网页和各类类型的文件,如:图片、flash、mp3、zip、rar、exe等文件。可以将整个网站完整地下传至硬碟内,并能保持原有的网站结构精确不变。只须要把抓取出来的网站放到web服务器(如:Apache)中,就可以实现完整的网站镜像。
Web-Harvest
Web-Harvest是一个Java开源Web数据抽取工具。它就能搜集指定的Web页面并从这种页面中提取有用的数据。Web-Harvest主要是运用了象XSLT,XQuery,正则表达式等这种技术来实现对text/xml的操作。
spiderpy
spiderpy是一个基于Python编码的一个开源web爬虫工具,允许用户搜集文件和搜索网站,并有一个可配置的界面。
The Spider Web Network Xoops Mod Team
pider Web Network Xoops Mod是一个Xoops下的模块java爬虫技术,完全由PHP语言实现。
HiSpider is a fast and high performance spider with high speed
严格说只能是一个spider系统的框架, 没有细化需求, 目前只是能提取URL, URL排重, 异步DNS解析, 队列化任务, 支持N机分布式下载, 支持网站定向下载(需要配置hispiderd.iniwhitelist). 查看全部
htmlparse
jsoup
HeritrixNutch
java 抓取网页内容
爬虫
java 爬虫比较
Nutch
开发语言:Java
简介:
Apache的子项目之一,属于Lucene项目下的子项目。
Nutch是一个基于Lucene,类似Google的完整网路搜索引擎解决方案,基于Hadoop的分布式处理模型保证了系统的性能,类似Eclipse的插件机制保证了系统的可客户化,而且很容易集成到自己的应用之中。
Larbin
开发语言:C++
简介
larbin是一种开源的网路爬虫/网路蜘蛛,由美国的年轻人 Sébastien Ailleret独立开发。larbin目的是能否跟踪页面的url进行扩充的抓取,最后为搜索引擎提供广泛的数据来源。
Larbin只是一个爬虫,也就是说larbin只抓取网页,至于怎样parse的事情则由用户自己完成。另外,如何储存到数据库以及完善索引的事情 larbin也不提供。
latbin最初的设计也是根据设计简单而且高度可配置性的原则,因此我们可以看见,一个简单的larbin的爬虫可以每晚获取500万的网页,非常高效。
Heritrix
开发语言:Java
简介
与Nutch比较
和 Nutch。二者均为Java开源框架,Heritrix是 SourceForge上的开源产品,Nutch为Apache的一个子项目,它们都叫做网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这种资源抓取到本地,使用的技巧都是剖析网站每一个有效的URI,并递交Http请求,从而获得相应结果,生成本地文件及相应的日志信息等。
Heritrix是个 “archival crawler” — 用来获取完整的、精确的、站点内容的深度复制。包括获取图象以及其他非文本内容。抓取并储存相关的内容。对内容来者不拒,不对页面进行内容上的更改。重新爬行对相同的URL不针对原先的进行替换。爬虫通过Web用户界面启动、监控、调整,允许弹性的定义要获取的URL。
二者的差别:
Nutch 只获取并保存可索引的内容。Heritrix则是照单全收。力求保存页面原样
Nutch 可以修剪内容,或者对内容格式进行转换。
Nutch 保存内容为数据库优化格式以便之后索引;刷新替换旧的内容。而Heritrix是添加(追加)新的内容。
Nutch 从命令行运行、控制。Heritrix有 Web 控制管理界面。
Nutch 的订制能力不够强,不过现今早已有了一定改进。Heritrix可控制的参数更多。
Heritrix提供的功能没有nutch多,有点整站下载的气味。既没有索引又没有解析,甚至对于重复爬取URL都处理不是挺好。
Heritrix的功能强悍 但是配置上去却有点麻烦。
其他网路爬虫介绍:
WebLech
WebLech是一个功能强悍的Web站点下载与镜像工具。它支持按功能需求来下载web站点并才能尽可能模仿标准Web浏览器的行为。WebLech有一个功能控制台并采用多线程操作。
Arale
Arale主要为个人使用而设计,而没有象其它爬虫一样是关注于页面索引。Arale才能下载整个web站点或来自web站点的个别资源。Arale能够够把动态页面映射成静态页面。
J-Spider
J-Spider:是一个完全可配置和订制的Web Spider引擎.你可以借助它来检测网站的错误(内在的服务器错误等),网站内外部链接检测java爬虫技术,分析网站的结构(可创建一个网站地图),下载整个Web站点,你还可以写一个JSpider插件来扩充你所须要的功能。
spindle
spindle 是一个建立在Lucene工具包之上的Web索引/搜索工具.它包括一个用于创建索引的HTTP spider和一个用于搜索这种索引的搜索类。spindle项目提供了一组JSP标签库促使这些基于JSP的站点不需要开发任何Java类能够够降低搜索功能。
Arachnid
Arachnid: 是一个基于Java的web spider框架.它包含一个简单的HTML剖析器才能剖析包含HTML内容的输入流.通过实现Arachnid的泛型才能够开发一个简单的Web spiders并才能在Web站上的每位页面被解析然后降低几行代码调用。 Arachnid的下载包中包含两个spider应用程序事例用于演示怎么使用该框架。
LARM
LARM才能为Jakarta Lucene搜索引擎框架的用户提供一个纯Java的搜索解决方案。它包含才能为文件,数据库表格构建索引的方式和为Web站点建索引的爬虫。
JoBo
JoBo 是一个用于下载整个Web站点的简单工具。它本质是一个Web Spider。与其它下载工具相比较它的主要优势是能否手动填充form(如:自动登入)和使用cookies来处理session。JoBo还有灵活的下载规则(如:通过网页的URL,大小,MIME类型等)来限制下载。
snoics-reptile
snoics-reptile是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口,把这个网站所有的能用浏览器通过GET的方法获取到的资源全部抓取到本地,包括网页和各类类型的文件,如:图片、flash、mp3、zip、rar、exe等文件。可以将整个网站完整地下传至硬碟内,并能保持原有的网站结构精确不变。只须要把抓取出来的网站放到web服务器(如:Apache)中,就可以实现完整的网站镜像。
Web-Harvest
Web-Harvest是一个Java开源Web数据抽取工具。它就能搜集指定的Web页面并从这种页面中提取有用的数据。Web-Harvest主要是运用了象XSLT,XQuery,正则表达式等这种技术来实现对text/xml的操作。
spiderpy
spiderpy是一个基于Python编码的一个开源web爬虫工具,允许用户搜集文件和搜索网站,并有一个可配置的界面。
The Spider Web Network Xoops Mod Team
pider Web Network Xoops Mod是一个Xoops下的模块java爬虫技术,完全由PHP语言实现。
HiSpider is a fast and high performance spider with high speed
严格说只能是一个spider系统的框架, 没有细化需求, 目前只是能提取URL, URL排重, 异步DNS解析, 队列化任务, 支持N机分布式下载, 支持网站定向下载(需要配置hispiderd.iniwhitelist).
什么叫爬虫技术?有哪些作用?
采集交流 • 优采云 发表了文章 • 0 个评论 • 295 次浏览 • 2020-06-15 08:03
网络爬虫(Web crawler),是一种根据5261一定的规则,自动地抓取万4102维1653网信息的程序或则脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以手动采集所有其才能访问到的页面内容,以获取或更新那些网站的内容和检索方法。从功能上来讲,爬虫通常分为数据采集,处理,储存三个部份。
传统爬虫从一个或若干初始网页的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队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以里面的图为例:
遍历路径:A-B-C-D-E-F G H I
2.3.3 反向链接数策略
反向链接数是指一个网页被其他网页链接指向的数目。反向链接数表示的是一个网页的内容遭到其他人的推荐的程度。因此,很多时侯搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后次序。
在真实的网路环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那种也的重要程度。因此,搜索引擎常常考虑一些可靠的反向链接数。
2.3.4 Partial PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于早已下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每位页面的PageRank值,计算完以后,将待抓取URL队列中的URL根据PageRank值的大小排列,并根据该次序抓取页面。
如果每次抓取一个页面,就重新估算PageRank值,一种折中方案是:每抓取K个页面后,重新估算一次PageRank值。但是此类情况都会有一个问题:对于早已下载出来的页面中剖析出的链接,也就是我们之前谈到的未知网页那一部分,暂时是没有PageRank值的。为了解决这个问题,会给那些页面一个临时的PageRank值:将这个网页所有入链传递进来的PageRank值进行汇总,这样就产生了该未知页面的PageRank值,从而参与排序。
2.3.5 OPIC策略策略
该算法实际上也是对页面进行一个重要性打分。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P以后,将P的现金平摊给所有从P中剖析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面根据现金数进行排序。
2.3.6 大站优先策略
对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。这个策略也因而称作大站优先策略。
3、爬虫分类
开发网路爬虫应当选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?上面说的爬虫,基本可以分3类:
(1)分布式爬虫:Nutch
(2)JAVA爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
3.1 分布式爬虫
爬虫使用分布式,主要是解决两个问题:
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的名气,当然最后的结果常常是项目延后完成。
如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或则es配合,就可以构成一套十分强悍的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch2.3发布再看。目前的Nutch2是一个极其不稳定的版本。
3.2 JAVA爬虫
这里把JAVA爬虫单独分为一类,是因为JAVA在网路爬虫这块的生态圈是十分健全的。相关的资料也是最全的。这里可能有争议,我只是随便谈谈。
其实开源网络爬虫(框架)的开发十分简单,难问题和复杂的问题都被原先的人解决了(比如DOM树解析和定位、字符集检查、海量URL去重),可以说是毫无技术浓度。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码十分简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是须要一段时间的调试和更改的。
对于爬虫的功能来说。用户比较关心的问题常常是:
1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么? 查看全部
1、爬虫技术2113概述
网络爬虫(Web crawler),是一种根据5261一定的规则,自动地抓取万4102维1653网信息的程序或则脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以手动采集所有其才能访问到的页面内容,以获取或更新那些网站的内容和检索方法。从功能上来讲,爬虫通常分为数据采集,处理,储存三个部份。
传统爬虫从一个或若干初始网页的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队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以里面的图为例:
遍历路径:A-B-C-D-E-F G H I
2.3.3 反向链接数策略
反向链接数是指一个网页被其他网页链接指向的数目。反向链接数表示的是一个网页的内容遭到其他人的推荐的程度。因此,很多时侯搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后次序。
在真实的网路环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那种也的重要程度。因此,搜索引擎常常考虑一些可靠的反向链接数。
2.3.4 Partial PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于早已下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每位页面的PageRank值,计算完以后,将待抓取URL队列中的URL根据PageRank值的大小排列,并根据该次序抓取页面。
如果每次抓取一个页面,就重新估算PageRank值,一种折中方案是:每抓取K个页面后,重新估算一次PageRank值。但是此类情况都会有一个问题:对于早已下载出来的页面中剖析出的链接,也就是我们之前谈到的未知网页那一部分,暂时是没有PageRank值的。为了解决这个问题,会给那些页面一个临时的PageRank值:将这个网页所有入链传递进来的PageRank值进行汇总,这样就产生了该未知页面的PageRank值,从而参与排序。
2.3.5 OPIC策略策略
该算法实际上也是对页面进行一个重要性打分。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P以后,将P的现金平摊给所有从P中剖析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面根据现金数进行排序。
2.3.6 大站优先策略
对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。这个策略也因而称作大站优先策略。
3、爬虫分类
开发网路爬虫应当选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?上面说的爬虫,基本可以分3类:
(1)分布式爬虫:Nutch
(2)JAVA爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
3.1 分布式爬虫
爬虫使用分布式,主要是解决两个问题:
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的名气,当然最后的结果常常是项目延后完成。
如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或则es配合,就可以构成一套十分强悍的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch2.3发布再看。目前的Nutch2是一个极其不稳定的版本。
3.2 JAVA爬虫
这里把JAVA爬虫单独分为一类,是因为JAVA在网路爬虫这块的生态圈是十分健全的。相关的资料也是最全的。这里可能有争议,我只是随便谈谈。
其实开源网络爬虫(框架)的开发十分简单,难问题和复杂的问题都被原先的人解决了(比如DOM树解析和定位、字符集检查、海量URL去重),可以说是毫无技术浓度。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码十分简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是须要一段时间的调试和更改的。
对于爬虫的功能来说。用户比较关心的问题常常是:
1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取JS生成的信息么?
开源爬虫框架大对比,你喜欢的框架在上面吗?
采集交流 • 优采云 发表了文章 • 0 个评论 • 298 次浏览 • 2020-05-07 08:01
介绍
大家好!我们从明天开始学习开源爬虫框架Scrapy,如果你看过《手把手》系列的前两篇,那么明天的内容就十分容易理解了。细心的读者或许会有疑问,为什么不学出身名门的Apache顶尖项目Nutch,或者人气激增的国外高手开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度:
这些框架都太优秀,都有好多用户,活跃度相对低的并不说明技术低,活跃度相对高的似乎只是多满足了一些用户需求。接下来我们还是要理智的对主流爬虫框架做一个对比剖析。
开源框架大PK
各路英雄早已到齐了, PK如今开始!
Nutch
介绍:
Nutch是一个开源的Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和网路爬虫。
尽管搜索是上网的基本要求,但是现有的搜索引擎的数量却在增长。并且这很有可能进一步演化成为一个公司垄断了几乎所有的网页搜索为其攫取商业利益。这似乎不利于广大Internet用户。
Nutch为我们提供了这样一个不同的选择。相对于这些商用的搜索引擎,Nutch作为开放源代码的搜索引擎将会愈发透明,从而更值得你们信赖。现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为何一个网页会排在一个特定的位置。除此之外, 有的搜索引擎根据网站所付的费用, 而不是依据它们本身的价值进行排序。与它们不同,Nutch没有哪些须要隐瞒,也没有动机去扭曲搜索的结果。Nutch将尽自己最大的努力为用户提供最好的搜索结果。
优点:
Nutch支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外太吸引人的一点在于,它提供了一种插件框架,使得其对各类网页内容的解析、各种数据的采集、查询、集群、过滤等功能才能便捷的进行扩充。正是因为有此框架,使得 Nutch 的插件开发特别容易,第三方的插件也层出不穷,极大的提高了 Nutch 的功能和声誉。
缺点:
对于大多数用户来说,一般是想做一个精确数据爬取的爬虫,就像第一篇里爬歌单那种“主题爬虫”。而第二篇介绍的“通用爬虫”适合做搜索引擎,这种需求就比较少。如果借此为标准,那么为搜索引擎而生的Nutch就有着天生缺点。Nutch的构架里大部分为搜索引擎而设计的,对精确爬取没有非常的考虑。也就是说,用Nutch做主题爬虫,会浪费好多的时间在不必要的估算上。而且假如你企图通过对Nutch进行二次开发来扩充其订制能力,基本上就要破坏Nutch的框架,反而不如自己写了。
Pyspider
介绍:
Pyspider是一个国人编撰的强悍的网路爬虫系统并带有强悍的WebUI。采用Python语言编撰,分布式构架,支持多种数据库前端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。
Pyspider的主要功能包括,抓取、更新调度多站点的特定的页面;需要对页面进行结构化信息提取;灵活可扩充开源爬虫框架,稳定可监控。满足了绝大多数Python爬虫的需求 —— 定向抓取,结构化化解析。但是面对结构迥异的各类网站,单一的抓取模式并不一定能满足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件常常不够灵活,于是,通过脚本去控制抓取成为了最后的选择。而去重调度,队列,抓取,异常处理,监控等功能作为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了最终的框架。
优点:
支持分布式布署。
完全可视化,对用户特别友好:WEB 界面编撰调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出。
简单开源爬虫框架,五分钟才能上手。脚本规则简单,开发效率高。
支持抓取JavaScript的页面。
总之,Pyspider十分强悍,强大到更象一个产品而不是一个框架。
缺点:
URL去重使用数据库而不是布隆过滤器,亿级储存的db io将造成效率大幅减低。
使用上的人性化牺牲了灵活度,定制化能力增加。
Scrapy
介绍:
Scrapy是一个为了爬取网站数据,提取结构性数据而编撰的应用框架。 可以应用在包括数据挖掘,信息处理或储存历史数据等一系列的程序中。Scrapy 使用 Twisted这个异步网路库来处理网路通信,架构清晰,并且包含了各类中间件插口,可以灵活的完成各类需求。Scratch,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧。
优点:
极其灵活的多样化爬取。
社区人数多、文档构建。
URL去重采用布隆过滤器方案。
可以处理不完整的HTML,Scrapy早已提供了selectors(一个在lxml的基础上提供了更中级的插口),可以高效地处理不完整的HTML代码。
缺点:
不支持分布式布署。
原生不支持抓取JavaScript的页面。
全命令行操作,对用户不友好,需要一定学习周期。
结论
篇幅有限,就先选择这三个最有代表性的框架进行PK。他们都有远超他人的优点,比如:Nutch天生的搜索引擎解决方案、Pyspider产品级的WebUI、Scrapy最灵活的多样化爬取。也都各自致命的缺点,比如Scrapy不支持分布式布署,Pyspider不够灵活,Nutch和搜索绑定。究竟该如何选择呢?
我们的目标是做纯粹的爬虫,不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可订制的Scrapy。Scrapy的灵活性几乎就能使我们完成任何严苛的抓取需求,它的“难用”也使我们不知不觉的研究爬虫技术。现在还不是享受Pyspider的时侯,目前的当务之急是打好基础,应该学习最接近爬虫本质的框架,了解它的原理,所以把Pyspider也排除掉。
最终,理性的从个人的需求角度对比,还是Scrapy胜出!其实Scrapy还有更多优点:
HTML, XML源数据选择及提取的原生支持。
提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了外置支持。
通过 feed导入 提供了多格式(JSON、CSV、XML),多储存前端(FTP、S3、本地文件系统)的外置支持。
提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。
高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来订制实现您的功能。
内置的中间件及扩充为下述功能提供了支持:
cookies and session 处理
HTTP 压缩
HTTP 认证
HTTP 缓存
user-agent模拟
robots.txt
爬取深度限制
针对非英语语族中不标准或则错误的编码申明, 提供了手动检查以及强壮的编码支持。
支持依照模板生成爬虫。在加速爬虫创建的同时,保持在小型项目中的代码更为一致。
针对多爬虫下性能评估、失败检查,提供了可扩充的 状态搜集工具 。
提供 交互式shell终端 , 为您测试XPath表达式,编写和调试爬虫提供了极大的便捷。
提供 System service, 简化在生产环境的布署及运行。
内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看而且调试爬虫。
Logging 为您在爬取过程中捕捉错误提供了便捷。
支持 Sitemaps 爬取。
具有缓存的DNS解析器。
查看全部

介绍
大家好!我们从明天开始学习开源爬虫框架Scrapy,如果你看过《手把手》系列的前两篇,那么明天的内容就十分容易理解了。细心的读者或许会有疑问,为什么不学出身名门的Apache顶尖项目Nutch,或者人气激增的国外高手开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度:
这些框架都太优秀,都有好多用户,活跃度相对低的并不说明技术低,活跃度相对高的似乎只是多满足了一些用户需求。接下来我们还是要理智的对主流爬虫框架做一个对比剖析。
开源框架大PK
各路英雄早已到齐了, PK如今开始!
Nutch
介绍:
Nutch是一个开源的Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和网路爬虫。
尽管搜索是上网的基本要求,但是现有的搜索引擎的数量却在增长。并且这很有可能进一步演化成为一个公司垄断了几乎所有的网页搜索为其攫取商业利益。这似乎不利于广大Internet用户。
Nutch为我们提供了这样一个不同的选择。相对于这些商用的搜索引擎,Nutch作为开放源代码的搜索引擎将会愈发透明,从而更值得你们信赖。现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为何一个网页会排在一个特定的位置。除此之外, 有的搜索引擎根据网站所付的费用, 而不是依据它们本身的价值进行排序。与它们不同,Nutch没有哪些须要隐瞒,也没有动机去扭曲搜索的结果。Nutch将尽自己最大的努力为用户提供最好的搜索结果。
优点:
Nutch支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外太吸引人的一点在于,它提供了一种插件框架,使得其对各类网页内容的解析、各种数据的采集、查询、集群、过滤等功能才能便捷的进行扩充。正是因为有此框架,使得 Nutch 的插件开发特别容易,第三方的插件也层出不穷,极大的提高了 Nutch 的功能和声誉。
缺点:
对于大多数用户来说,一般是想做一个精确数据爬取的爬虫,就像第一篇里爬歌单那种“主题爬虫”。而第二篇介绍的“通用爬虫”适合做搜索引擎,这种需求就比较少。如果借此为标准,那么为搜索引擎而生的Nutch就有着天生缺点。Nutch的构架里大部分为搜索引擎而设计的,对精确爬取没有非常的考虑。也就是说,用Nutch做主题爬虫,会浪费好多的时间在不必要的估算上。而且假如你企图通过对Nutch进行二次开发来扩充其订制能力,基本上就要破坏Nutch的框架,反而不如自己写了。
Pyspider
介绍:
Pyspider是一个国人编撰的强悍的网路爬虫系统并带有强悍的WebUI。采用Python语言编撰,分布式构架,支持多种数据库前端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。
Pyspider的主要功能包括,抓取、更新调度多站点的特定的页面;需要对页面进行结构化信息提取;灵活可扩充开源爬虫框架,稳定可监控。满足了绝大多数Python爬虫的需求 —— 定向抓取,结构化化解析。但是面对结构迥异的各类网站,单一的抓取模式并不一定能满足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件常常不够灵活,于是,通过脚本去控制抓取成为了最后的选择。而去重调度,队列,抓取,异常处理,监控等功能作为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了最终的框架。
优点:
支持分布式布署。
完全可视化,对用户特别友好:WEB 界面编撰调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出。
简单开源爬虫框架,五分钟才能上手。脚本规则简单,开发效率高。
支持抓取JavaScript的页面。
总之,Pyspider十分强悍,强大到更象一个产品而不是一个框架。
缺点:
URL去重使用数据库而不是布隆过滤器,亿级储存的db io将造成效率大幅减低。
使用上的人性化牺牲了灵活度,定制化能力增加。
Scrapy
介绍:
Scrapy是一个为了爬取网站数据,提取结构性数据而编撰的应用框架。 可以应用在包括数据挖掘,信息处理或储存历史数据等一系列的程序中。Scrapy 使用 Twisted这个异步网路库来处理网路通信,架构清晰,并且包含了各类中间件插口,可以灵活的完成各类需求。Scratch,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧。
优点:
极其灵活的多样化爬取。
社区人数多、文档构建。
URL去重采用布隆过滤器方案。
可以处理不完整的HTML,Scrapy早已提供了selectors(一个在lxml的基础上提供了更中级的插口),可以高效地处理不完整的HTML代码。
缺点:
不支持分布式布署。
原生不支持抓取JavaScript的页面。
全命令行操作,对用户不友好,需要一定学习周期。
结论
篇幅有限,就先选择这三个最有代表性的框架进行PK。他们都有远超他人的优点,比如:Nutch天生的搜索引擎解决方案、Pyspider产品级的WebUI、Scrapy最灵活的多样化爬取。也都各自致命的缺点,比如Scrapy不支持分布式布署,Pyspider不够灵活,Nutch和搜索绑定。究竟该如何选择呢?
我们的目标是做纯粹的爬虫,不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可订制的Scrapy。Scrapy的灵活性几乎就能使我们完成任何严苛的抓取需求,它的“难用”也使我们不知不觉的研究爬虫技术。现在还不是享受Pyspider的时侯,目前的当务之急是打好基础,应该学习最接近爬虫本质的框架,了解它的原理,所以把Pyspider也排除掉。
最终,理性的从个人的需求角度对比,还是Scrapy胜出!其实Scrapy还有更多优点:
HTML, XML源数据选择及提取的原生支持。
提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了外置支持。
通过 feed导入 提供了多格式(JSON、CSV、XML),多储存前端(FTP、S3、本地文件系统)的外置支持。
提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。
高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来订制实现您的功能。
内置的中间件及扩充为下述功能提供了支持:
cookies and session 处理
HTTP 压缩
HTTP 认证
HTTP 缓存
user-agent模拟
robots.txt
爬取深度限制
针对非英语语族中不标准或则错误的编码申明, 提供了手动检查以及强壮的编码支持。
支持依照模板生成爬虫。在加速爬虫创建的同时,保持在小型项目中的代码更为一致。
针对多爬虫下性能评估、失败检查,提供了可扩充的 状态搜集工具 。
提供 交互式shell终端 , 为您测试XPath表达式,编写和调试爬虫提供了极大的便捷。
提供 System service, 简化在生产环境的布署及运行。
内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看而且调试爬虫。
Logging 为您在爬取过程中捕捉错误提供了便捷。
支持 Sitemaps 爬取。
具有缓存的DNS解析器。
开源爬虫框架各有哪些优缺点
采集交流 • 优采云 发表了文章 • 0 个评论 • 385 次浏览 • 2020-05-04 08:06
分布式爬虫:Nutch
JAVA单机爬虫:Crawler4j,WebMagic,WebCollector
非JAVA单机爬虫:scrapy
海量URL管理
网速快
Nutch是为搜索引擎设计的爬虫,大多数用户是须要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有很大的意义。
用Nutch做数据抽取,会浪费好多的时间在不必要的估算上。而且假如你企图通过对Nutch进行二次开发,来促使它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非。
Nutch依赖hadoop运行,hadoop本身会消耗好多的时间。如果集群机器数目较少,爬取速率反倒不如单机爬虫。
Nutch似乎有一套插件机制,而且作为亮点宣传。可以看见一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都晓得,Nutch的插件系统有多拙劣。利用反射的机制来加载和调用插件,使得程序的编撰和调试都显得异常困难,更别说在里面开发一套复杂的精抽取系统了。
Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的开源爬虫框架,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点虽然是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text)
用Nutch进行爬虫的二次开发,爬虫的编撰和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要使一个团队的人都看懂Nutch源码。调试过程中会出现除程序本身之外的各类问题(hadoop的问题、hbase的问题)。
Nutch2的版本目前并不适宜开发。官方如今稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。Nutch2.3之前、Nutch2.2.1以后的一个版本,这个版本在官方的SVN中不断更新。而且十分不稳定(一e799bee5baa6e997aee7ad94e78988e69d8331333363396465直在更改)。
支持多线程。
支持代理。
能过滤重复URL的。
负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往须要通过模拟浏览器(htmlunit,selenium)来完成。
先说python爬虫,python可以用30行代码,完成JAVA
50行代码干的任务。python写代码的确快开源爬虫框架,但是在调试代码的阶段,python代码的调试常常会花费远远少于编码阶段市下的时间。
使用python开发,要保证程序的正确性和稳定性,就须要写更多的测试模块。当然若果爬取规模不大、爬取业务不复杂,使用scrapy这些爬虫也是挺不错的,可以轻松完成爬取任务。
bug较多,不稳定。
网页上有一些异步加载的数据,爬取这种数据有两种方式:使用模拟浏览器(问题1中描述过了),或者剖析ajax的http请求,自己生成ajax恳求的url,获取返回的数据。如果是自己生成ajax恳求,使用开源爬虫的意义在那里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。
爬虫常常都是设计成广度遍历或则深度遍历的模式,去遍历静态或则动态页面。爬取ajax信息属于deepweb(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方式来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。简单来说,就是将生成的ajax恳求作为种子,放入爬虫。用爬虫对那些种子,进行深度为1的广度遍历(默认就是广度遍历)。
这些开源爬虫都支持在爬取时指定cookies,模拟登录主要是靠cookies。至于cookies如何获取,不是爬虫管的事情。你可以自动获取、用http请求模拟登录或则用模拟浏览器手动登入获取cookie。
开源爬虫通常还会集成网页抽取工具。主要支持两种规范:CSSSELECTOR和XPATH。
爬虫的调用是在Web的服务端调用的,平时如何用就如何用,这些爬虫都可以使用。
单机开源爬虫的速率,基本都可以讲本机的网速用到极限。爬虫的速率慢,往往是由于用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速率慢。而这种东西,往往都是用户的机器和二次开发的代码决定的。这些开源爬虫的速率,都太可以。 查看全部
分布式爬虫:Nutch
JAVA单机爬虫:Crawler4j,WebMagic,WebCollector
非JAVA单机爬虫:scrapy
海量URL管理
网速快
Nutch是为搜索引擎设计的爬虫,大多数用户是须要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有很大的意义。
用Nutch做数据抽取,会浪费好多的时间在不必要的估算上。而且假如你企图通过对Nutch进行二次开发,来促使它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非。
Nutch依赖hadoop运行,hadoop本身会消耗好多的时间。如果集群机器数目较少,爬取速率反倒不如单机爬虫。
Nutch似乎有一套插件机制,而且作为亮点宣传。可以看见一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都晓得,Nutch的插件系统有多拙劣。利用反射的机制来加载和调用插件,使得程序的编撰和调试都显得异常困难,更别说在里面开发一套复杂的精抽取系统了。
Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的开源爬虫框架,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点虽然是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text)
用Nutch进行爬虫的二次开发,爬虫的编撰和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要使一个团队的人都看懂Nutch源码。调试过程中会出现除程序本身之外的各类问题(hadoop的问题、hbase的问题)。
Nutch2的版本目前并不适宜开发。官方如今稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。Nutch2.3之前、Nutch2.2.1以后的一个版本,这个版本在官方的SVN中不断更新。而且十分不稳定(一e799bee5baa6e997aee7ad94e78988e69d8331333363396465直在更改)。
支持多线程。
支持代理。
能过滤重复URL的。
负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往须要通过模拟浏览器(htmlunit,selenium)来完成。
先说python爬虫,python可以用30行代码,完成JAVA
50行代码干的任务。python写代码的确快开源爬虫框架,但是在调试代码的阶段,python代码的调试常常会花费远远少于编码阶段市下的时间。
使用python开发,要保证程序的正确性和稳定性,就须要写更多的测试模块。当然若果爬取规模不大、爬取业务不复杂,使用scrapy这些爬虫也是挺不错的,可以轻松完成爬取任务。
bug较多,不稳定。
网页上有一些异步加载的数据,爬取这种数据有两种方式:使用模拟浏览器(问题1中描述过了),或者剖析ajax的http请求,自己生成ajax恳求的url,获取返回的数据。如果是自己生成ajax恳求,使用开源爬虫的意义在那里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。
爬虫常常都是设计成广度遍历或则深度遍历的模式,去遍历静态或则动态页面。爬取ajax信息属于deepweb(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方式来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。简单来说,就是将生成的ajax恳求作为种子,放入爬虫。用爬虫对那些种子,进行深度为1的广度遍历(默认就是广度遍历)。
这些开源爬虫都支持在爬取时指定cookies,模拟登录主要是靠cookies。至于cookies如何获取,不是爬虫管的事情。你可以自动获取、用http请求模拟登录或则用模拟浏览器手动登入获取cookie。
开源爬虫通常还会集成网页抽取工具。主要支持两种规范:CSSSELECTOR和XPATH。
爬虫的调用是在Web的服务端调用的,平时如何用就如何用,这些爬虫都可以使用。
单机开源爬虫的速率,基本都可以讲本机的网速用到极限。爬虫的速率慢,往往是由于用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速率慢。而这种东西,往往都是用户的机器和二次开发的代码决定的。这些开源爬虫的速率,都太可以。