首页 > 解决方案 > Web 数据抓取问题-自动下载

问题描述

我想从这个网站自动下载所有白皮书:https ://icobench.com/ico ,当你选择进入每个ICO的网页时,有一个白皮书标签可以点击,它会带你到pdf预览屏幕,我想要使用rvest从css脚本中检索pdf url,但在我尝试节点上的多个输入后没有任何返回

一个 ico 的 css 检查示例:

embed id="plugin" type="application/x-google-chrome-pdf" 
src="https://www.ideafex.com/docs/IdeaFeX_twp_v1.1.pdf" 
stream-url="chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/9ca6571a-509f-4924-83ef-5ac83e431a37" 
headers="content-length: 2629762
content-type: application/pdf

我尝试过类似以下的方法:

library(rvest)
url <- "https://icobench.com/ico"
url <- str_c(url, '/hygh')
webpage <- read_html(url)
Item_html <- html_nodes(webpage, "content embed#plugin")
Item <- html_attr(Item_html, "src")

或者

Item <- html_text(Item_html)
Item

但是什么都没有回来,有人可以帮忙吗?

从上面的例子中,我希望检索到 ico 官方网站的嵌入式 url 以获取 pdf 白皮书,例如:https ://www.ideafex.com/docs/IdeaFeX_twp_v1.1.pdf

但由于它是谷歌浏览器插件,它没有被 rvest 包检索,有什么想法吗?

标签: rweb-scrapingcss-selectorsrvest

解决方案


一个可能的解决方案:

使用您的示例,我将更改选择器以组合,使用后代组合器,id属性 = 值选择器。这将按 id 定位白皮书选项卡,按href属性值定位子链接;使用 $ 以运算符结尾来获取 pdf。

library(rvest)
library(magrittr)

url <- "https://icobench.com/ico/hygh"
pdf_link <- read_html(url) %>% html_node(., "#whitepaper [href$=pdf]") %>% html_attr(., "href")

更快的选择?

您还可以定位object标签及其data属性

pdf_link <- read_html(url) %>% html_node(., "#whitepaper object") %>% html_attr(., "data")

探索哪些适合跨页面的目的。

后者可能更快,并且似乎在我检查过的几个站点中使用。


所有 icos 的解决方案:

你可以把它放在一个接收 url 作为输入的函数中(每个 ico 的 url);如果没有找到 url/css 选择器无法匹配,该函数将返回 pdf url 或其他一些指定值。您需要为该场景添加一些处理。然后在所有 ico url 的循环上调用该函数。


推荐阅读