在 R 中创建网络抓取循环

Creating a webscraping loop in R

我正在尝试在 R 中设置一个网络抓取循环,但我真的很难创建一个有效的循环。

我目前有一个 excel 文件,其中包含我想要抓取的相关 URL。我将其读入 R 并尝试使用网络抓取来提取每个 URL 的产品标题,这些产品当前位于标题为 DE 的列中。 table 的一个简短示例是:

我一直使用的代码是:

library(readxl)
URL_creator <- read_excel("URL creator.xlsx")

library(rvest)
content_list <- vector()
for (i in 1:nrow(URL_creator)) {
  url <- URL_creator[i,]$DE
  html <- read_html(url)
  nodes <- html_nodes(html, "productTitle") %>% 
    html_text() %>% 
    gsub("\n", "", .) %>% 
    trimws()
  {    content_list[i] <- nodes[1]
    }}

由于某种原因,内容列表 returned 是空白的。我希望它会 return 标题为 DE 的列中每个相应 URL 的产品标题,但我不确定哪里出错了。

非常感谢任何帮助:)

谢谢!

我对您的代码进行了一些更改并且工作正常。看看:

for (i in URL_creator$DE) {
  html <- read_html(i)
  nodes <- html_nodes(html, "title") %>% 
    html_text() %>% 
    gsub("\n", "", .) %>% 
    trimws()
  {    content_list[i] <- nodes[1]
    }}

content_list[1] 的输出是:

https://amazon.de/dp/B0821PBSPJ "Planet Waves D'Addario 10MB00 Mandolinengurt, geflochten, 2,5 cm, Braun/cremefarben : Amazon.de: Musikinstrumente & DJ-Equipment"

更新

要将结果 (content_list) 转换为数据框,您应该更改行:

content_list[i] <- nodes[1]

如下:

content_list[i] <- as.data.frame(nodes[1])%>%
t()

它将 content_list 转换为数据框并将列转换为行。