没有合适的资源?快使用搜索试试~ 我知道了~
*SoftwareX 6(2017)98原始软件出版物RCrawler:一个用于并行Web抓取和抓取的R包Salim Khalil*,Mohamed Fakir信息学系,科学和技术学院,摩洛哥,贝尼ar t i cl e i nf o文章历史记录:2016年11月8日收到2017年3月2日收到修订版,2017年关键词:网络爬虫Webscraper R包并行爬行Web挖掘数据收集a b st ra ctRCrawler是一个贡献的R包,用于基于域的Web抓取和内容抓取。RCrawler是R环境下的第一个并行Web爬虫实现,它可以抓取、解析、存储页面、提取内容,并生成可直接用于Web内容挖掘应用程序的数据。然而,它也是灵活的,并且可以适应于其他应用。RCrawler的主要特性是多线程抓取、内容提取和重复内容检测。此外,它还包括URL和内容类型过滤、深度级别控制和robot.txt解析器等我们的爬虫有一个高度优化的系统,每秒可以下载大量的页面,同时对某些崩溃和蜘蛛陷阱具有鲁棒性。在本文中,我们描述了RCrawler的设计和功能,并报告了我们在R环境中实现它的经验,包括处理R限制的不同优化最后,我们讨论了我们的实验结果。©2017作者。由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本v 0.1用于此代码版本的代码/存储库的永久链接http://github.com/ElsevierSoftwareX/SOFTX-D-16-00090法律代码许可证MIT使用git的代码版本控制系统使用的软件代码语言、工具和服务r、Java编译要求、操作环境依赖性64位操作系统R环境版本3.2.3及以上(64位)Rpackages:httr,rJava,xml2,data.table,foreach,doParallel,parallel如果可用,链接到开发人员文档/手册https://github.com/salimk/Rcrawler/blob/master/man/RcrawlerMan.pdf问题支持电子邮件khalilsalim1@gmail.com1. 介绍万维网上数据的爆炸性增长使其成为世界上最大的公开数据库。因此,它为数据挖掘和知识发现提供了前所未有的机会。Web挖掘是一个旨在从互联网上可用的信息中发现有用知识的科学领域,根据挖掘目标和收集的信息,可以分为三类:Web结构挖掘,Web使用挖掘和Web内容挖掘[1]。Web结构挖掘是从网页之间的链接结构中提取模式,并将其呈现给用户通讯作者。电子邮件地址:khalilsalim1@gmail.com(S. Khalil),fakfad@yahoo.fr(M.Fakir)。http://dx.doi.org/10.1016/j.softx.2017.04.004作为一个有向图,其中节点表示页面,有向边表示链接[2]。Web使用挖掘挖掘从Web日志记录分析中收集的用户活动模式,以了解用户在网站访问期间的行为[3]。Web内容挖掘从Web内容中提取和挖掘有价值的信息后者有两个目标:搜索结果挖掘,用于改善搜索引擎和信息检索领域[4];网页内容挖掘,用于分析和探索目的。这项工作是一个项目的一部分,旨在从网上报纸内容提取有用的知识。在Web内容挖掘中,数据收集是一项重要的任务(见图1)。事实上,一些Web挖掘应用程序使用Web爬虫从Web检索和收集数据[5]。网络爬虫程序或蜘蛛程序是一种通过跟踪2352-7110/©2017作者。由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxS. Khalil,M.Fakir/SoftwareX 6(2017)9899Fig. 1. Web内容挖掘应用程序中涉及的流程示意图概述。系统和自动化的方式。存在各种类型的网络通用抓取工具旨在抓取和索引所有网页,无论其内容如何。其他的,称为优先爬虫,更有针对性地针对特定的焦点或主题[6]。网络爬虫主要用于支持搜索引擎的操作,特别是在网络索引中[7]。然而,网络爬虫也用于旨在收集和挖掘在线数据的其他应用程序中,例如网页内容挖掘应用程序。为了提高内容挖掘结果的准确性,应该只提取有价值的数据某些不相关的数据,如导航栏横幅和广告,应被排除在外,这涉及到数据提取过程。数据提取,或数据抓取[8],是从网页中提取目标信息以产生准备好进行后处理的结构化数据Web抓取和数据提取可以作为两个独立的连续任务(爬虫将所有网页提取到本地存储库中,然后提取过程应用于整个集合)或同时执行的任务(当爬虫提取页面时,提取过程单独应用于每个页面网络爬虫通常以收集网页而闻名,但是当爬虫也可以在爬行期间执行数据提取时,它可以被称为网络抓取器。本文描述了RCrawler的体系结构和实现,RCrawler是一个基于R的、特定于领域的、多线程的网络爬虫和网络抓取器。这项研究的动机是需要建立一个增强的R-基本网络爬虫,其可以自动方式抓取和抓取网页内容(文章、标题和元数据)以产生结构化数据集。困难的方面是在一个主要用于计算和统计计算而不是自动数据处理的环境中实现并行爬虫。因此,为了在R环境中实现数据收集,我们面临的挑战是克服这些弱点并使环境适应我们的需求。R是一种高效的统计分析和数据处理软件环境,为Web挖掘提供了强大的支持。事实上,R提供了大量的函数和包,可以处理Web挖掘任务[10]。有一些R软件包可用于数据收集过程,例如Rvest、tm.plugin.webmining和scrapeR。然而,这些软件包不提供基本的抓取,因为它们只能解析[11]并从URL中提取内容,用户必须手动收集和因此,它们无法遍历网页,自动收集链接和数据例如,在大多数情况下,用户依赖外部工具来执行此任务。因此,我们将抓取过程集成到R环境中,以提供一个完整的数据流平台,包括实际数据分析之前和之后的步骤事实上,从一个给定的URL,RCrawler可以自动抓取和解析该域中的所有URL,并从这些URL中提取符合用户条件的特定内容。表1提供了一些流行的数据收集包的比较,并说明了我们的新包的实用性如表1所示,scrapeR和rvest需要一个URL列表提前提供。同时,webmining可以获得一些改进,因为它可以从某些feed格式(如XML和JSON)中获取URL,但它的使用仍然受到限制,因为并非所有网站都有feed,即使feed它可能不包含完整的网站树。所有这些包都可以有效地检索和解析特定的网页。然而,这些工具的共同弱点是,它们在处理多个请求方面受到限制,并且由于礼貌约束,任何试图为URL列表循环相同函数的尝试都可能导致错误或崩溃RCrawler可以很容易地应用于许多Web内容挖掘问题,例如意见挖掘[12],事件或主题检测[13]和推荐系统[14]。此外,它的功能允许它扩展到探索特定的网站结构。然而,其使用仍然限于小型项目, R环境的性质,它并不完全致力于处理海量数据抓取。本文试图解决许多问题,开始研究人员经常有关于Web内容挖掘和数据收集技术,无论使用的编程语言事实上,我们已经尝试收集和总结了数据收集过程中涉及的一些技术。此外,我们报告了所有的主要挑战,任何研究人员或程序员可能会遇到的时候,设计他们的第一个网络爬虫/刮刀。本文件其余部分的结构如下。第2节介绍了引导爬虫开发的关键技术要求。第3节介绍了爬虫的设计和体系结构。第4节介绍了RCrawler的主要特性及其实现细节。第5节介绍了该软件包的主要组件,以及它的实际演示。第6节描述了RCrawler的使用模式,第7节描述了我们的实验结果,以及对RCrawler的性能度量和统计数据的讨论。最后,第8节提出了我们的结论和未来的研究方向。2. 目标和要求在这一章中,我们描述了引导我们的爬虫实现的功能需求和系统目标有五个基本要求:1. R-native:通常,当R-用户需要自动抓取和抓取大量数据时,他们会求助于外部工具来收集URL或执行完整的任务 , 然 后 将 收 集 到 的 数 据 导 入 R 。 因 此 , 我 们 编 写RCrawler的主要原因是在R环境中因此,我们的解决方案应该在R中原生实现。2. 并行化:RCrawler应该利用并行化,以获得显著的性能增强,并有效地利用各种系统资源,包括处理器。3. 礼貌:爬虫应该能够解析和遵守robots.txt命令。此外,爬虫应避免在短时间内从给定主机请求太多页面4. 效率:我们的解决方案应该巧妙地利用资源,并对蜘蛛陷阱具有弹性爬虫应该能够检测和避免重复的URL或网页。5. 灵活性和可重构性:我们希望设计一个灵活的系统,可以应用于各种场景。Be- low是RCrawler设置选项的汇总列表• 项目名称和目录。100S. Khalil,M.Fakir/SoftwareX 6(2017)98表1比较一些流行的R包用于数据收集。包名称爬检索解析描述刮板没有是的是的从给定的URL向量中检索网页并将其解析为使用一个可识别的模式提取出感兴趣的信息。tm.plugin.webmining没有是的是的跟踪Web提要格式(如XML和JSON)上的链接,内容使用锅炉管方法。雷韦斯特没有是的是的包装了xml2和httr包,以便它们可以轻松地下载并操作HTML和XML。RCrawler是的是的是的使用各种技术抓取网站并提取其内容一些基本的Web工具包:XML,XML2没有没有是的HTML/XML解析器Jsonlite,RJSONIO没有没有是的JSON解析器RSelenium没有没有是的浏览器自动化选择器没有没有是的解析CSS3选择器并将其转换为CSS1.0Httr、RCurl没有是的没有处理HTTP/HTTPS请求用户代理、连接超时和请求延迟。过滤器:包括/排除内容类型(MIME)、错误页面、文件扩展名和匹配特定正则表达式模式的URL。并行爬行:用户指定节点数和连接数(同时请求).选择接受Robots.txt文件或忽略它。最大深度级别可控制抓取深度。爬虫应该提供在抓取过程中对每个被抓取的页面应用内容提取的某些特定功能(如搜索模式)的能力关于可视化和结果,爬行器应该以组织良好且易于使用的数据结构(如向量、列表和数据框)返回爬行的数据。事实上,由其他包返回的数据总是展开的,并且需要额外的努力来将其安排到一个数据结构中。我们描述RCrawler的数据结构如下:表示通用URL索引的数据帧,包括获取的URL和页面详细信息(内容类型、HTTP状态、外链接和内链接数量、编码类型和级别)的列表包含所有下载页面的文件存储库。抓取内容的矢量。包含爬网统计信息的消息。对于链接分析,需要一个数据结构来表示网络图(边)的连通性。在爬行过程中,Crawler应显示爬行状态。3. RCrawler架构网络爬虫必须同时处理几个挑战,其中一些相互矛盾[15]。受以前工作的启发,如Mercator [16]和Ubicrawler [17],我们试图使爬虫架构尽可能优化和简单,以避免主机环境过载(见图11)。 2)的情况。爬虫从用户提供的给定网站URL开始,逐步获取该URL并提取新的URL(外链接)。这些又被添加到待处理的边界列表中。当边界中的所有URL都被处理时,抓取过程停止。首先,爬虫启动工作环境,包括索引结构、包含Web文档集合的存储库以及用于并行计算的集群节点(工作者)爬行由多个工作线程执行并且工作池处理程序组件准备要并行处理的URL池。然后,每个节点对给定的URL执行以下函数:1. 使用GET请求下载相应的文档及其HTTP2. 解析并提取文档中包含的所有链接3. 继续进行URL的规范化和标准化。4. 应用URL过滤器,只保留与用户提供的配置、文件类型和域特定URL匹配的URL。因此,对于每个URL,每个worker都返回其HTML文档、HTTP头详细信息和发现的外链接列表URL-seen函数检查URL在添加到边界之前是否已经被处理在将文档存储到存储库中之前,Is-not-duplicate?函数检查它是否未被其他URL处理否则,它将被丢弃。我们倾向于在每次Crawler迭代中将边界列表和索引写入磁盘,以防止在Crawler崩溃时丢失数据以下是RCrawler的主要组件:HTTP 请求 : 处理HTTP请求。链接提取器:分析和提取链接从爬行文档。内容重复检查:检测重复和接近重复的文件.工作线程管理器:处理多线程和并行计算。数据提取:用于解析和提取网页内容的组件。索引:一种数据结构,用于存储有关抓取网页的信息。与蜘蛛陷阱、URL规范化、robot.txt解析器和其他功能相关的其他组件将在后面的章节中讨论。4. 功能属性和实现本节讨论RCrawler当前版本的功能4.1. 并行爬行-多线程提高爬虫性能和效率的最直接方法是通过并行计算[18]。然而,在R下实现多线程爬虫涉及许多限制和挑战。··················S. Khalil,M.Fakir/SoftwareX 6(2017)98101图二. R爬虫的架构和主要组件。图三. 在R环境中设计我们的多线程实现。爬行操作的过程由多个并发进程或节点并行执行,如图所示。3.第三章。本质上,每个运行节点被分配给操作系统提供的物理控制为了在R环境中处理并行计算[19],我们使用了doParallel和parallel包[20,21]。首先,我们启动N个节点进程(N由用户指定)。然后,我们使用共享库、函数和数据结构初始化所有节点。但是,因为在R中很难管理节点对共享数据结构的访问,所以我们将这种访问限制为只读。因此,所有写操作都由主抓取功能执行。此后,工作池处理程序从边界选择一个URL池,由节点并行处理(池大小与同时请求的数量相似请注意,来自一个IP的太多并发请求的发生地址可能看起来像DOS攻击(频繁的请求阻止服务器服务来自真正客户端的请求为了避免这种情况,建议限制对给定主机的活动请求的数量。foreach包[22]提供了基本的循环结构,并利用并行后端来执行任务并返回表示所有节点结果集合的数据结构。请注意,即使在运行时,foreach循环也会以与计数器相同的顺序返回项列表并联因此,每个节点处理一个给定的URL,并返回一个包含三个元素(URL文档、HTTP头细节和提取的URL列表)的列表数据结构这些列表随后作为一个集合(列表集合)一起返回,由main函数隔离并映射到它们的原始URL(图2)。爬行器应避免在短时间间隔内从给定主机因此,我们认为,102S. Khalil,M.Fakir/SoftwareX 6(2017)98我们已经在对同一主机的后续请求之间引入了RequestDelay最后,当爬网完成时,停止并删除节点进程4.2. HTTP请求处理程序HTTP请求处理程序是负责HTTP连接的组件,它提供了编写一般HTTP请求、获取URL、获取和发布表单等方便的功能。一个高效的爬虫应该对HTTP连接和请求的配置提供很大程度的控制。实际上,它应该允许用户设置一些HTTP属性,例如:User-agent:抓取网站时,RCrawler默认将自己标识然而,一些网络托管公司可能会阻止用户代理,如果它不是浏览器或如果它发出太多请求。因此,重要的是要改变抓取器(用户代理)来模拟不同的浏览器,并继续抓取而不被禁止。最大请求时间,即,等待响应直到放弃的秒数,以防止浪费时间等待来自慢速服务器或巨大页面的响应。一些额外的头属性可以添加到HTTP请求中,以控制服务器处理传入请求的方式,或者提供有关请求内容的额外信息。为了提高爬虫因此,响应必须包括内容和所有相关的必需信息(响应代码、内容类型、编码等)。httr[23]包已经被导入来管理HTTP连接,因为它提供了一组丰富的函数来处理HTTP和URL。此外,它还提供了一个使用R套接字连接的高级接口异常处理和错误检查是页面获取过程中的重要考虑因素,以防止在每个失败的请求崩溃。事实上,爬虫在解析内容之前会检查如果为null,则表示该域名不存在或无法解析。否则,如果URL主机服务器发出了HTTP错误代码或不支持的内容类型,则不会解析URL文档,并且根据用户配置,可能会也可能不会对其进行索引。4.3. HTML解析和链接提取抓取网页后,每个爬行节点需要解析网页内容,提取索引所需的超链接和相关信息然而,在节点内部实现内容提取的解析可能会减慢爬行过程,并可能导致负载分布不平衡。解析是使用xml2库[24]实现的,这是一个构建在libxml2C库之上的简单而一致的接口请注意,我们只解析超链接或通过XML模式提取的特定数据首先,从HTTP请求中检索内容,并将整个文档解析为C语言中树状数据结构的文档对象模型(DOM)[25在这种数据结构中,HTML中出现的每个元素现在都表示为自己的实体或单个节点。所有节点一起被称为节点集。解析过程还包括畸形的自动验证步骤事实上,xml2能够处理格式不正确的HTML文档,因为它可以识别错误并纠正错误以创建有效的DOM。在下一步中,通过所谓的处理函数(handler function)将C级节点结构转换为R语言的对象,处理函数管理C和R之间的转换这对于DOM的进一步处理是必要的最后,通过xml_find_all函数提取与文档中的href标记匹配的所有节点来之后,我们使用gsub函数获取每个节点的href值。4.4. 链接规范化和过滤URL规范化的过程[26]将URL转换为规范形式,以避免边界中的重复URL事实上,规范化消除了语法不同但指向同一页面的URL,将它们转换为语法相同的URL。一个规范URL包含以下五个规则(有例子):1. 小写URL字符串从Http://www.Test.Com到http://www.test.com。2. 解析URL路径从www.example.com下载http://www.test.com/.././ f.htm到http://www.test.com/f.htm。3. 非www URL到www从http://test.com/sub/sub/下载到http://www.test.com/sub/sub/。4. 相对于绝对基URL的URL,来自/sub/file. html到http://www.test.com/sub/file.html。5. 锚点消除从http://www.test.com/f.html#tite到http://www.test.com/f.htm。几乎所有这些功能都是通过模式匹配和替换使用常规example实现的。在链接规范化之后,必须过滤提取的链接在此特定阶段,区分两个级别的过滤。第一个影响爬网过程,并在链接添加到边界之前应用于链接,以跳过某些文件类型或路径。文件类型的识别的先前形式基于文件扩展名,并且后续识别通过内容类型响应报头来确认,这更可靠。此外,由于RCrawler是一个特定于域的爬虫,因此提取的链接应该属于域源,并且必须删除所有外部链接。另一种过滤方法涉及蜘蛛陷阱。事实上,一些服务器端脚本,如CGI(公共网关接口),可以生成无限数量的逻辑路径(页面和目录),从而产生无限深度的网站。这样的蜘蛛陷阱可以简单地通过检查URL长度(或URL中的斜杠最后,在向工作池添加新的第二层过滤是基于用户设置和要被爬虫索引的控制链接。4.5. 重复和近似重复检测在许多情况下,一个网页可能在多个URL下可用由于URL的可选参数,动态网站(如博客、论坛或电子商务)在特定网站上出现重复页面的概率更高这将导致网络爬虫多次存储相同的文档,这将对内容挖掘结果产生负面影响。因此,为了减少冗余存储,处理成本和网络带宽要求,网络爬虫可以执行重复检测测试,以确定文档之前是否已存储[27]。一种快速有效的方法是将每个页面的URL映射S. Khalil,M.Fakir/SoftwareX 6(2017)98103∗−−或者通过使用Rabin我们维护一个名为指纹的数据结构,它存储下载文档的校验和,因此只比较指纹,而不是比较整个文档。然而,在某些情况下,多个URL可能在视觉上呈现相同的内容,但在结构上总体上或在一小部分上有所不同,例如链接、脚本标签或广告。问题是,从计算机的角度来看,只有当页面逐字节完全匹配时,这些页面被认为是近乎重复的。Charikar这构成了一种降维方法,它将高维向量映射到小尺寸的指纹。对于网页,此应用如下:1. 定义指纹大小,例如,64位。2. 网页被转换成一组令牌(功能)。每个令牌都被分配了一个权重。在我们的实现中,我们只对文档进行令牌化,并且我们认为所有令牌都具有相同的权重1。3. 每个令牌都使用传统的散列函数由其散列值表示。4. 整数向量V(长度为64)被初始化为0。然后,对于每个令牌否则,元素将增加相应令牌为了测量两个指纹A和B的相似性,我们计算两者之间不同的比特数作为相异性的度量。如果结果等于0,则两个文档被认为是相同的。我们决定在RCrawler中实现三个可能的选项:1. 避免重复检测过程。2. 使用MD5哈希进行重复检测。3. 使用SimHash进行近似重复检测。对于MD5哈希,我们使用了digest包。然而,我们无法在R中实现SimHash算法,因为有限的整数大小(2 109),这阻碍了计算。因此,我们决定在Java中实现它,然后将其包装在RCrawler包中,使其在R中可用为了将R与Java接口,我们使用了rJava库[30],它提供了从R函数内部调用Java类所因此,我们创建了两个函数:getSimhash将网页作为字符串,并将哈希位大小作为输入,并返回其指纹。getDistance将两个指纹作为输入,并返回相似度值。4.6. 管理数据结构在内存中,RCrawler是一个特定于域的爬虫,它只遍历特定域名的网页。因此,边界的大小是有限的,可以放入内存。此外,R最多可以分配23 41字节(8 GB)内存,以及可以在64位平台上支持具有超过2311个元素(20亿)的向量,这在我们的情况下是足够的。作为一个结果,前沿数据结构是作为一个字符向量在内存中实现。随着爬行的进行,工作池处理程序函数顺序地选择下一个要爬行的URL,新发现的URL被发送到边界的尾部在获取网页之后,它在爬虫索引中被索引,爬虫索引在内存中被表示为数据帧。在存储库中,对于每个网站,RCrawler启动一个本地文件夹,该文件夹将保存该网站的所有文件,如下所示提取的内容。csv:包含提取的内容。指数. csv:crawler的索引文件。pages:下载的网页的集合。备份:用于恢复/恢复爬网会话的爬网程序状态。4.7. 附加功能实现机器人txt解析器。并不是所有可以抓取的东西都应该被抓取,而且有越来越多的礼貌方式。事实上,网站管理员有时希望至少禁止抓取某些内容,或者在某些情况下,他们可能希望阻止某些爬虫程序以节省带宽。机器人txt文件用于此目的。这个机器人排除协议告诉爬虫网站上的哪些信息可以收获,也可能不收获。为此 , 我 们 实 现 了 一 个 函 数 , 通 过 正 则 表 达 式 获 取 和 解 析robots.txt,并识别相应的访问规则。当启动RCrawler时,如果Obeyrobots参数设置为TRUE,则爬虫将解析网站的robots。txt文件,并返回其规则(允许和不允许的目录或文件)进行过滤。外链/内链计数。一个网页的外链数量代表了从该网页中提取和过滤的链接数量。但是,在抓取过程中会计算入链接(来自其他页面的指向该页面的链接)的数量。在抓取过程中,程序在索引中查找每个提取的URL,并增加其相应的in-link值。深度水平控制。这不是目录结构中的文件深度例如,级别0表示根文档。因此,在获取该文档中的所有链接后,级别将递增1,依此类推。我们实现了此功能以控制爬行的深度级别。备份并恢复会话。作为R上的一个常规函数,爬行器在爬行过程结束时(当边界中的所有URL都已处理时)返回其结果。因此,在本发明中,为了避免在函数在操作过程中崩溃的情况下丢失数据,我们需要将crawler状态和数据结构保存在磁盘上。但是,由于磁盘查找和延迟,在每次迭代中将所有数据写入磁盘是非常耗时的。因此,一个方便的解决方案是启动一个文件连接,并且只将新条目追加到现有文件,而不是在每次迭代时重新启动整个文件。另一种解决方案是使用全局R变量。事实上,在R计算机制中,环境起着至关重要的作用,因为R始终在幕后使用它们进行交互式计算。环境的任务是将一组名称关联或绑定到一组值。默认情况下,当调用函数时,会创建一个本地环境因此,它的所有变量都与该环境相关联,并且只能用于该函数。在崩溃的情况下,它的所有因变量都被浪费了。然而,通过使用全局环境(可用的顶级环境)来处理一些关键的数据结构,例如爬虫索引,前沿将使这些更可靠地防止函数崩溃。然而,这与持久性存储提供的安全性还相差甚远内容提取。Web爬取和数据提取可以作为两个独立的连续任务(爬取器将所有网页提取到本地存储库中,然后将提取过程应用于整个集合)或作为同时执行的任务(在提取URL时,内容抓取······104S. Khalil,M.Fakir/SoftwareX 6(2017)98--见图4。随着爬网的进行,匹配和追加组件比其他组件需要更多的时间。图五、 通过对匹配和添加元件的优化,使履带行走速度趋于稳定。分别应用于每一页)。为了扩展RCrawler作为web scraper的功能,我们引入了使用XML模式的手动提取。用户可以指定无限数量的命名模式,以在爬网过程中提取。此外,用户还可以通过使用urlregexfilter参数过滤与特定正则表达式模式匹配的URL,指定应该提取哪些页面(详细页面)。4.8. 评价和改进在初步测试中,我们注意到爬行器速度在爬行1000个页面后显著下降。为了识别减慢爬虫速度的组件,我们对每个组件分别进行了测试,分别获取、解析、检查和向数据结构追加链接。图4示出了每个RCrawler组件所需的时间。可以看出,匹配和追加过程随着爬取的进行而花费更多的时间。事实上,随着边界大小的增加,检查URL是否存在于表中会消耗更多的时间。为了检查URL是否存在于边界中,我们使用%in%操作符。不幸的是,这个操作符并不是为处理大型数据集而设计的。因此,为了保持爬虫的速度,我们用data.table包中的%chin%操作符替换了%in% 操作符[31],该操作符针对大型数据集和字符向量进行了优化。此外,我们还优化了过滤和追加操作。图 5显示了优化前后的履带速度。可以看出,下载的网页数量变得更加稳定和线性。请注意,剩余的小速度变化是由于服务器和互联网连接可能过载并导致响应时间延迟5. 包装组件此版本的RCrawler软件包包括以下功能:RCrawler:爬虫的主要功能。Rcrawler(网站,没有核心, nbcon, 最大深度, 请求延迟,请求延迟= 0,重复检测= 0,服从机器人=索引错误页,用户代理,索引错误页= 5,URLlenlimit = 255,ur lE x t f i l t e r,ur l re g e x f i l t e r,UrlParams,s t a t s l in k s = 0,Encod,patterns,excludepattern)LinkExtractor:以URL作为输入,获取其网页,并按照一组规则提取所有链接链接提取器(url,ID,列弗,IndexErrPages,用户代理,=五,URLlenlimit=255,u r l E x t f i l t e r、st a t s l i n k s = 0,encod,u r l b o t f i l e r,removeparams)LinkNormalization:将URL列表转换为规范形式链接规范化(l个链接、电流)Getencoding:解析网页并根据内容和HTTP头检索字符编码.Getencoding(url)RobotParser:获取和解析机器人。txt文件,并返回其相应的访问规则。RobotParser(网站 、用户代理)GetSimHash:使用外部Java类生成给定网页的SimHash指纹。getsimHash(string、hashbits)Linkparameters:从给定的URL中提取URL参数和值。链接参数 (URL)Linkparamsfilter:从特定URL中排除给定的参数集。Linkparamsfilter(URL,参数)Contentscraper:提取与给定的一组搜索模式匹配的内容。contentscraper(网页,模式 、昵称,excludepat,astext =TRUE,encod)6. 实际应用在本节中,我们将展示一些如何使用该软件包的示例。•Rcrawler(“http://www. example. com/“)使用默认配置抓取、索引和存储网页。Rcrawler(网址=“http:/ /www. example . com/“,no_ core=8,nbcon=8, 服从机器人=真的,用户代理=”Mozilla 3.11“)爬行和索引网站使用8个核心和8个并行请求相对于机器人。txt规则Rcrawler(网站=“http:/ /www. example . com/“,无芯= 4,nbcon = 4 , ur l re g e x f i l t e r =“/\\d{4}/\\d{2}/“ , n =“./myrepo”,MaxDepth=3)使用4个核心和4个并行请求爬取网站。但是,这只会索引匹配正则表达式模式(/d{4}/ d{2}/)的URL,并将页面存储在自定义目录爬网程序到达第三级时停止··S. Khalil,M.Fakir/SoftwareX 6(2017)98105图六、 当使用更多的进程和连接时,每分钟爬取的页面数会增加。表2开源Web抓取库和框架进行评估。项目名称类型主要作用语言并行性RCrawler图书馆爬行刮擦R是的雷韦斯特图书馆简体中文R没有Scrapy框架爬行刮擦Python是的Rcrawler (网站 =“ http :/公司简介 例如 . 联系我们“ ,u r l re g e x f i l t e r =“/\\d{4}/\\d{2}/“,模式= c(“//[@class =' post − body entry − content ' ]“,“/ /[ @class= entry− t i t l e使用默认配置爬网网站,并从与特定正则表达式匹配的网页中抓取与两个搜索模式匹配的内容。请注意,用户可以使用excludepattern参数来排除提取的节点,例如,在期望的节点包括不期望的“子”节点(是其父节点)的情况7. 实验结果与讨论我们在一台普通PC上运行我们的实验,具有6 GB RAM和100GB SSD硬盘驱动器,其中CPU是Core i7,操作系统是MicrosoftWindows 8.1。我们的软件包安装在R平台版本3.2.2上。页面来自《纽约时报》网站。7.1. 评估RCrawler多线程在加载RCrawler包之后,我们在各种配置下测试运行爬虫,核心数量在1到8之间变化,连接数量(同时请求)在1到16之间变化。请注意,我们已经禁用了额外的功能,如提取和过滤。图6显示了每种情况下每分钟抓取的平均页面数。通过观察结果,很明显,爬行器的速度随着内核和连接的增加而增加。7.2. 评估RCrawler速度性能为了做一个公平的比较,我们选择了三个相似或几乎相同的开源项目,用于不同的平台。表2给出了开源爬虫在使用的语言、基本角色和并行化支持方面的比较Scrapy是一个开源的Python应用程序框架,用于编写抓取网站的网络这通常被认为是最快的开源网页抓取工具。然而,没有令人信服的研究来证明这一点。与其他爬虫相比,Scrapy还允许在抓取过程中从网页中提取数据。这是在我们的评估中提供有意义的结果的关键特征。为了比较爬虫程序实现的速度,我们将尝试从纽约时报网站抓取网页然后,我们单独评估和监控每个爬虫。我们注意到RCrawler可以直接与Scrapy兼容,因为两者具有相似的性质和特征。因此,这两者都获得网站的着陆页作为输入,并且具有相同的数据提取规则和配置参数。然而,Rvest没有支持见图7。与Rvest相比,RCrawler实现了高性能,但不如Scrapy快。用于爬行或多线程。为了进行适当的比较,我们实现了一个手工制作的Rvest脚本。在这里,我们预先提供了一个URL列表,然后使用循环函数来遍历它们。我们应用Rvest函数来检索和解析网页,并提取所需的数据。我们决定在评估中不考虑本文中提到的其他R包,因为它们都是围绕与Rvest相同的基本工具包构建的,并且实现了大致相同的性能。图7显示RCrawler在速度方面比其他R包表现更好事实上,多线程可以有效地使用可用资源。然而,由于R在数据处理方面的缺点,我们的爬虫仍然不如Python scraper高效虽然爬虫速度被认为是一个性能因素,但爬虫也应该对Web服务器保持礼貌,这样它就不会在短时间内频繁请求服务器。这对于以领域为中心的爬虫(比如我们的爬虫)来说尤其如此因此,对同一服务器的连续请求之间应该有足够的延迟7.3. 评估RCrawler抓取我们收集HTML数据以分析完整性。我们使用了数据抽取技术,因为这是RCrawler目前唯一支持的技术。此外,我们使用了八个内核和八个连接。由于我们的scraper实现需要一个URL才能工作,我们使用了一个具有预定义数量的网页(1000页)的本地域Web服务器其中,有800个内容页面和200个菜单页面。每个内容网页都包含两个应该提取的元素:标题和帖子。因此,我们预先知道应该提取的数据量为1600条记录。实验所得统计数据见表3。可以看出,通过比较Web抓取器实现的提取数据的总量事实上,XML被认为是最可靠的提取技术之一,因为它直接基于XML树来定位元素节点、属性节点、文本节点以及XML文档中可能出现的任何其他内容,而无需自动学习或人工智能。因此,在我们的情况下,抓取功能对爬虫性能没有直接影响然而,爬虫的覆盖质量在其性能中起着非常重要的作用这描述了提取爬网的所有可访问链接的能力·106S. Khalil,M.Fakir/SoftwareX 6(2017)98表3开源网页抓取性能。项目名称报废率RCrawler百分之九十九点八雷韦斯特百分之九十九点八Scrapy百分之九十九点八页. 在这一点上,Rvest无法进行比较,因为它没有跟踪发现的URL的能力事实上,我们相信RCrawler是在R环境中抓取和抓取数据的最佳R解决方案。它可以抓取,下载页面,甚至高速高效地抓取内容。除了易于使用之外,RCrawler还提供了一个完整的解决方案来处理R内部的数据收集任务,具有许多可定制的设置和选项,并且不需要使用外部网络爬虫/scraper。8. 结论和今后的工作在本文中,我们提出了RCrawler,一个基于R的,多线程的,灵活的,功能强大的网络爬虫,提供了一套有用的功能,网络爬行,网页抓取,也潜在的链接分析。RCrawler的实现还突出了R并行计算环境的一些弱点,我们已经能够通过使我们的体系结构适应R标准并在必要时采用高级算法来克服这些弱点RCrawler是一个正在进行的项目。我们打算使用C++或Rcpp中的低级函数来提高其我们还计划通过实现重点抓取、更新管理和自动内容检测和提取来扩展其特性和功能引用[1] Markov Z,Larose DT. Web数据挖掘:揭示Web内容,结构和使用模式。John Wiley& Sons;2007.[2] da Costa MG,Gong Z. Web结构挖掘:导论。见:信息采集,2005年IEEE国际会议。IEEE;2005年。p. 六、[3] Srivastava J,Cooley R,Deshpande M,Tan PN. Web使用挖掘:从Web数据中 发 现 和 应 用 使 用 模 式 。 ACMSIGKDD Exploratio
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功