使用 R 从网页中抓取可下载文件的链接地址?

Posted

技术标签:

【中文标题】使用 R 从网页中抓取可下载文件的链接地址?【英文标题】:Using R to scrape the link address of a downloadable file from a web page? 【发布时间】:2015-10-09 14:42:05 【问题描述】:

我正在尝试自动化一个过程,该过程涉及从几个网页下载 .zip 文件并提取其中包含的 .csv。挑战在于 .zip 文件名以及链接地址每周或每年都会更改,具体取决于页面。有没有办法从这些页面中抓取当前链接地址,以便我可以将这些地址提供给下载文件的函数?

其中一个目标页面是this one。我要下载的文件是标题“2015 Realtime Complete All Africa File”下的第二个项目符号——即压缩的 .csv。在我撰写本文时,该文件在网页上标记为“Realtime 2015 All Africa File(2015 年 7 月 11 日更新)(csv)”,我想要的链接地址是 http://www.acleddata.com/wp-content/uploads/2015/07/ACLED-All-Africa-File_20150101-to-20150711_csv.zip,但今天晚些时候应该会改变,因为数据每周一更新——这就是我的挑战。

我尝试过,但未能在 Chrome 中自动提取带有“rvest”和 selectorgadet 扩展名的 .zip 文件名。事情是这样的:

> library(rvest)
> realtime.page <- "http://www.acleddata.com/data/realtime-data-2015/"
> realtime.html <- html(realtime.page)
> realtime.link <- html_node(realtime.html, xpath = "//ul[(((count(preceding-sibling::*) + 1) = 7) and parent::*)]//li+//li//a")
> realtime.link
[1] NA

html_node() 调用中的 xpath 来自仅突出显示 Realtime 2015 All Africa File(2015 年 7 月 11 日更新)(csv) 字段的绿色部分,然后单击足够其他突出显示的位页面去掉所有的黄色,只留下红色和绿色。

我在这个过程中犯了一个小错误,还是我完全走错了路?如您所知,我在 HTML 和网页抓取方面的经验为零,因此非常感谢您的帮助。

【问题讨论】:

试试realtime.html %&gt;% html_node(xpath = "/html/body/div/div/div/div[1]/div/article/div/ul[1]/li[2]/a") %&gt;% html_attr("href")。我使用 Firebug 来提取 xpath。 是的,这行得通,非常感谢。我现在去尝试弄清楚如何使用 firebug。 @lukeA 我能够在 Chrome 中使用 Inspect Element 来查看具有我想要的数据集的其他页面的 html,并根据您调试的示例找出如何编写一个适用于它的 xpath。所以:再次感谢! xpath 也可以在您的浏览器中找到,只需右键单击(在所需元素上)并选择。将在右侧打开一个窗口,突出显示该元素。右键单击此元素,复制并向下滚动到 xpath。 【参考方案1】:

我认为您试图在单个 xpath 表达式中做太多事情 - 我将通过一系列较小的步骤来解决问题:

library(rvest)
library(stringr)
page <- html("http://www.acleddata.com/data/realtime-data-2015/")

page %>%
  html_nodes("a") %>%       # find all links
  html_attr("href") %>%     # get the url
  str_subset("\\.xlsx") %>% # find those that end in xlsx
  .[[1]]                    # look at the first one

【讨论】:

效率很高,谢谢。对于我的任务,我需要第一个 .zip 文件的 url,但是通过将“\\.xlsx”替换为“\\.zip”很容易获得。瞧。 ...警告建议使用 'xml2::read_html' 而不是 html()。工作正常。

以上是关于使用 R 从网页中抓取可下载文件的链接地址?的主要内容,如果未能解决你的问题,请参考以下文章

从 JavaScript 创建一个可下载的附件?

在 Heroku 中构建可下载的站点地图 zip 文件

检测链接是不是为可下载文件

如何通过可下载的链接将文本保存为 .txt 文件?

java爬取网站中所有网页的源代码和链接

MVC;将可下载文件返回到视图