【问题标题】:Scraping html tables into R data frames将 html 表抓取到 R 数据帧中
【发布时间】:2018-04-27 14:55:34
【问题描述】:

我有问题。我必须从网站上提取信息:https://www.transfermarkt.co.uk/premier-league/startseite/wettbewerb/GB1,其中包含俱乐部名称、他们网站的地址(transfermarkt 个人资料)以及球队个人资料中的体育场名称。这是我第一次接触从网站提取数据。任何帮助表示赞赏。一开始我写了这样的代码:

library(rvest)
theurl <- "https://www.transfermarkt.co.uk/premier-league/startseite/wettbewerb/GB1"
file<-read_html(theurl)
tables<-html_nodes(file, "table")
table1 <- html_table(tables[4], fill = TRUE)

【问题讨论】:

  • 您到底需要什么参数? “CLUBS OF THE PREMIER LEAGUE 17/18”的表格?
  • 如果你通过管道传递 html_nodes(file, "table") %>% html_nodes(a) 你可以看到hrefs,那么这是正则表达式的问题
  • 我需要球队资料中包含俱乐部名称、网站俱乐部和体育场名称的表格。

标签: r screen-scraping rvest xmlnode


【解决方案1】:

正如@Henry Navarro 所指出的,尚不清楚您究竟需要哪些节点等。找到正确的节点是一项耗时的任务,因此您需要指定您想要的节点。为此,您可以使用Selectorgadget

在下面的一个快速示例中,您可以如何生成团队网站列表,您必须使用 rvest 循环访问这些网站以提取信息。我认为到目前为止,您为此目的缺少的主要功能是html_attr(),例如,请参见answer。当然,你必须在这些网站上找到节点来提取体育场等信息。

file %>% 
html_nodes("table") %>%
{ .[4]} %>% 
html_nodes("a") %>% 
html_attr("href") %>% 
{ .[grep("/startseite/verein",., fixed=T)]} %>% 
unique() %>% 
{ paste0("https://www.transfermarkt.co.uk", .) }

# [1] "https://www.transfermarkt.co.uk/fc-chelsea/startseite/verein/631/saison_id/2017"               
# [2] "https://www.transfermarkt.co.uk/manchester-city/startseite/verein/281/saison_id/2017"          
# [3] "https://www.transfermarkt.co.uk/manchester-united/startseite/verein/985/saison_id/2017"        
# [4] "https://www.transfermarkt.co.uk/tottenham-hotspur/startseite/verein/148/saison_id/2017" 
#...

【讨论】:

  • 这正是我的意思,谢谢。我如何才能了解这些俱乐部的体育场?
  • 导航到您在浏览器中抓取的“startseite”网站之一。然后使用该站点上的 Selectorgadget 来识别您要提取的节点,即有关体育场的信息在哪里。这应该是所有其他俱乐部的相同链接结构(可能需要考虑俱乐部的名称)。使用此信息,您可以为需要抓取的所有页面编写循环。但请注意,请尊重网站的条件,如果您在短时间内抓取了许多网站,从而产生了高流量,您可能会在脚本中添加暂停以减少产生的流量。
猜你喜欢
  • 2010-11-26
  • 1970-01-01
  • 2017-12-22
  • 2022-01-13
  • 2020-10-07
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多