有没有办法在R中选择性地收集网络数据?

问题描述

我正在尝试从German Rakuten网站上抓取数据。 Rakuten公司是日本知名的企业,通过互联网销售各种商品。问题在于他们针对不同的国家采用不同的市场策略。例如,在美国,人们在支付所谓的订阅费之前就无法获得产品。在德国,情况有所不同,可以立即获得产品和价格。因此,乐天的链接似乎已被标记为地理标记,即,如果从另一个目标登录,则无法看到内容。此序言对于每个尝试遵循我的步骤并遇到连接错误的人都很重要。
好的,这样说,我想读取数据并将其保存到数据框中。

这是我的初始代码:

library(rvest)
library(purrr)
library(dplyr)     

rakuten <- "https://www.rakuten.de/suchen/kitchenAid?category=0"
ra_html <- read_html(rakuten)

title <- html_nodes(ra_html,".vw-productCard .name") 
price <- html_nodes(ra_html,".vw-productCard .price .actual")
discount <- html_nodes(ra_html,".vw-productCard .thumb .discount .text") 

正如人们所看到的,我想刮擦产品说明(标题对象),价格(价格对象)和折扣可用性(折扣对象)(如果有)。他们销售的每种产品总是有描述和价格(我正在查看KitchenAid的价格),但是折扣很少出现。

然后我解析数据:

urlrakuten <- sprintf("https://www.rakuten.de/suchen/kitchenAid?category=0",1:10)

#define empty data frame to store all data
alllistings <- data.frame()

for (i in urlrakuten){
  
  print(i)
  #read the page just once
  page <- read_html(i)
      
  # parse titles
 title <- page%>%html_nodes('.vw-productCard .name') %>% html_text()
 
  # parse prices
  price <- page %>% html_nodes('.vw-productCard .price .actual') %>% html_text()
  
  # parse discounts
  discount <- page %>% html_nodes('.vw-productCard .thumb .discount .text') %>%  html_text()

  #create temporary dataframe to store data from this loop
  tempdf <- data.frame(title,price,discount) 
  
  #combine temp with all data
  alllistings <- rbind(alllistings,tempdf)
}

它与前两个对象配合使用非常好,但对最后一个(折扣)却不起作用。第一页只有四个折扣,R刮掉所有折扣,然后用这四个值的重复填充其余行,请参见我的输出:

output

我肯定会丢失一些东西,但我不知道如何解决。我希望将相同的输出与第三列值组织到它们所属的行中,其余的仅用NA填充。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)