使用 R 进行 Web 爬取
介绍
网络爬虫是一种应用非常广泛的活动,其实现方式因您要查找的数据而异。例如,您可能会爬取网络来分析亚马逊上的产品评级或对名人推文的回应。本指南将向您展示如何开始使用 R 进行网络爬虫。我们将定义什么是网络爬虫和网络爬虫,然后了解如何选择最佳方法来完成特定活动。本指南假设您具有 R 方面的工作知识。
抓取
抓取时寻找的数据可能具有多种形状和大小。您执行的任务和挖掘相关数据的方式取决于数据的格式和要挖掘的站点数量。
抓取时获取的最常见数据形式是 API 响应(SOAP、JSON)、HTML 和 FTP 或 SFTP。不过,数据也可能以其他形式出现,具体取决于提供商的实现。
一般来说,你只需告诉 R 在哪里查找信息以及如何处理找到的信息或如何处理它。Web 抓取通常旨在处理来自网站的单个响应,例如原始 HTML 或 JSON。
爬行
爬取与大型搜索引擎的做法非常相似。简单来说,爬取是一种查找源自一个 URL 或 URL 列表的 Web 链接的方法。为了进行爬取,您需要进行一些抓取,但爬取时您只对指向其他 URL 的链接感兴趣。它比抓取更严格,因为抓取时您要决定要查找的内容,但爬取时您会从 Web 服务器中提取尽可能多的网站,然后再进行处理。这两个术语经常被混淆,因为它们的概念非常接近。
在抓取网页时,您需要注意robots.txt,这是一项标准,有时也称为机器人排除标准或机器人排除协议。这是通过网站与网络爬虫或网络机器人进行通信的官方解决方案。它告诉机器人不应扫描或处理特定网站的哪些区域。有些机器人拒绝遵守此标准,因为它更像是一项需要遵守的协议,而不是网站可以强制执行的协议。电子邮件收集器和垃圾邮件机器人通常会忽略它。
robots.txt 的示例
下面的例子告诉机器人远离特定的文件:
User-agent: *
Disallow: /product/secret_file.html
你可以让机器人根据其类型做出不同的行为:
User-agent: googlebot
Disallow: /secret/
User-agent: googlebot-news
Disallow: /
在这里,您禁止googlebot访问/secret/文件夹,并完全禁止googlebot-news访问您的网站。
行动
install.packages("rvest")
install.packages("Rcrawler")
使用 Rcrawler 包需要 Java。要验证 Java 是否可用,可以发出以下命令:
system("java -version")
输出应如下所示:
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
[1] 0
要使用这些模块,您需要加载它们:
library("Rcrawler")
library("rvest")
在开始抓取之前,请考虑一下您将对特定网站造成的影响。有些网站实施了针对拒绝服务攻击的机制。这些攻击通常意味着您从 Web 服务器请求数据的速度比它能够提供数据的速度快,因此资源超载。它可能会崩溃,或者您的 IP 地址可能会被暂时禁止访问该网站。您应该始终保持礼貌并遵守机器人协议。
您可能想要选择一个规模较小的随机站点。
Rcrawler(Website = "http://r3ap3rpy.pythonanywhere.com/", no_cores = 4, no_conn = 4, Obeyrobots = TRUE)
输出应如下所示:
Preparing multihreading cluster .. In process : 1..
Progress: 100.00 % : 1 parssed from 1 | Collected pages: 1 | Level: 1
+ Check INDEX dataframe variable to see crawling details
+ Collected web pages are stored in Project folder
+ Project folder name : r3ap3rpy.pythonanywhere.com-070950
+ Project folder path : C:/Users/dszabo/Documents/r3ap3rpy.pythonanywhere.com-070950
这里,Obeyrobots参数默认为FALSE;它告诉 Rcrawler 遵守robots.txt文件的内容。no_cores告诉 R 应该在多少个核心上运行抓取活动,no_conn告诉 R 每个核心可以同时建立多少个连接。抓取的每个网页都会下载到本地驱动器的Documents目录下,并创建一个新文件夹,名称为您正在抓取的网站。
Rcrawler 模块包含许多功能,可让您针对要提取的特定信息的网站进行定位。查阅文档总是明智的。
假设您只想从网站提取链接,并收集外部链接,即指向其他网站的链接。
page <- LinkExtractor(url = "http://r3ap3rpy.pythonanywhere.com/", ExternalLInks=TRUE)
现在在页面变量中您有以下值:
$Info
$Info$Id
[1] 112
$Info$Url
[1] "http://r3ap3rpy.pythonanywhere.com/"
$Info$Crawl_status
[1] "finished"
$InternalLinks
[1] "http://r3ap3rpy.pythonanywhere.com/" "http://r3ap3rpy.pythonanywhere.com/github" "http://r3ap3rpy.pythonanywhere.com/ytube" "http://r3ap3rpy.pythonanywhere.com/udemy"
[5] "http://r3ap3rpy.pythonanywhere.com/education" "http://r3ap3rpy.pythonanywhere.com/experience" "http://r3ap3rpy.pythonanywhere.com/certificates"
$ExternalLinks
[1] "https://r3ap3rpy.github.io/" "http://shortenpy.pythonanywhere.com/" "https://twitter.com/r3ap3rpy"
[4] "https://www.linkedin.com/in/d%C3%A1niel-ern%C5%91-szab%C3%B3-081359157" "https://github.com/r3ap3rpy" "https://www.youtube.com/channel/UC1qkMXH8d2I9DDAtBSeEHqg"
现在您可以通过这种方式引用外部链接:page$ExternalLinks。
结论
网页抓取和爬取的艺术是一项非常强大的技能。它使我们能够了解幕后情况,计算我们自己的统计数据,并从不同的角度分析网站。在本指南中,我们了解了抓取和爬取之间的主要区别,以及 robots.txt 的用途。通过演示,我们深入了解了如何使用Rcrawler模块从网站中提取信息或从头到尾抓取信息。我希望本指南对您有所帮助,并感谢您阅读它。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~