【问题标题】:How to webscrape texts that are contained into sublinks of a link in R?如何抓取包含在 R 中链接的子链接中的文本?
【发布时间】:2020-11-10 23:32:54
【问题描述】:

我正在尝试对这个website 进行网络抓取。

如您所见,您可以单击一个主链接和一系列标题来访问文本。最后我想得到的是主链接的所有这些子链接中的文本。我对网络抓取不是很熟悉,所以环顾四周,我认为是这样的:


library(rvest)

x <- read_html("https://www.ecb.europa.eu/press/pressconf/html/index.en.html")

x1 <- html_nodes(x, ".doc-title a") # this using selector gadget

然而,这次尝试失败了。有没有人可以帮我解决这个问题?

非常感谢!

【问题讨论】:

  • 结果是在页面加载后加载的,所以这样的抓取尝试很遗憾不会成功。但是,加载的链接遵循一个很好的模式,您可以轻松地按年收集它们。例如 2020 年:ecb.europa.eu/press/pressconf/2020/html/index_include.en.html
  • @Bas 这听起来不错。我可以替换“2020”并循环播放,对吗?
  • 是的,你可以。我通过右键单击网页,单击“检查元素”,转到“网络”选项卡并按XHR(数据)请求过滤来发现这一点。当您刷新页面并向下滚动时,您可以看到正在发出的请求。
  • @Bas 谢谢,非常有帮助

标签: r web-scraping rvest web-scraping-language


【解决方案1】:

可以获取初始页面的链接文本:

library(RSelenium)
library(rvest)
shell('docker run -d -p 4445:4444 selenium/standalone-firefox')
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4445L, browserName = "firefox")
remDr$open()
remDr$navigate("https://www.ecb.europa.eu/press/pressconf/html/index.en.html")

# This is useful to load all the page
for(i in 1 : 100)
{
  print(i)
  remDr$executeScript(paste0("scroll(0, ", i * 2000, ")"))
}

Sys.sleep(5)
html_Content <- remDr$getPageSource()[[1]]
html_Link <- str_extract_all(string = html_Content, pattern = "/press/pressconf/[^<]*html")[[1]]
html_Link_En <- html_Link[str_detect(html_Link, "\\.en\\.html")]
links_To_Remove <- c("/press/pressconf/html/index.en.html", "/press/pressconf/visual-mps/html/index.en.html" )
html_Link_En <- html_Link_En[!(html_Link_En %in% links_To_Remove)]
html_Link_En <- unique(html_Link_En)

# Extract text from first link
# It is possible to use a for loop to get the text of all links ...
html_Content <- read_html(paste0("https://www.ecb.europa.eu", html_Link_En[1]))
html_Content %>% html_text()

【讨论】:

    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2018-05-09
    相关资源
    最近更新 更多