一般来说,我对R和web抓取是非常陌生的。我试图通过R从HTML表中获取特定的数据片段,但是所有标记在表中都具有相同的名称,这意味着如果我尝试使用该名称获取数据,它将获取比我需要的更多的数据。
我试图从中获取的表显然是显示统计数据的巨大表。
例如,整个表中都有< td class= "zientriert“>,所以当我尝试从该行获取数据时,它会从每个”zientriert“行获取数据。有没有办法获取我需要的数据,而不是从每一行都获取数据?
发布于 2018-12-14 06:00:51
HTML表单元格是唯一可识别的,尽管它们具有相同的类。如果不是这样,数据就不能输入。关于你的问题,答案是肯定的:)
通过使用所需单元格的路径选择器,可以最容易地抓取这些信息。如果只想要一个单元格,请在浏览器中打开开发人员工具(F12)并选择该单元格。我正在运行Firefox,你也可以右击和“检查元素”。
如果您随后右键单击要抓取=> Copy => selector
的元素,您将看到一组选择器可供选择。例如,对于您提供的页面(2,67)的顶行PPM,XPath选择器是/html/body/div[6]/div[10]/div[1]/div/div[4]/div/table/tbody/tr[1]/td[6]
。
当然,此选择器对于该单元格是唯一的。如果你想更动态地抓取,那么学习更多关于选择器和正则表达式来定义一个范围绝对是值得的。CSS选择器在这种情况下可能更容易,因为您可以从样式相同的元素中提取数据。
如果你想了解更多关于web抓取的知识,了解网页是如何构建的(主要是HTML和CSS)是很重要的。
发布于 2018-12-14 06:22:11
清理数据仍然需要一些工作,这将为您提供df中的大部分数据
> library(tidyverse)
> library(rvest)
>
> page <- xml2::read_html("https://www.transfermarkt.com/andreas-christensen/leistungsdatendetails/spieler/196948")
>
> tbl <- html_table(page, fill = T)[[2]]
> head(tbl, 10)
Season Competition Competition reihenfolge ASC, saison_id DESC, verein_id ASC Club PPM
1 Total : Total : NA 199 1,81 11 8
2 18/19 Europa League NA 6 2,67 - - - / - / -
3 18/19 Premier League NA 1 0,00 - - 1 / - / -
4 18/19 EFL Cup NA 2 3,00 - - - / - / -
5 18/19 Community Shield NA - - - - - / - / -
6 17/18 Premier League NA 27 1,67 - - - / - / -
7 17/18 FA Cup NA 3 3,00 - - - / - / -
8 17/18 Champions League NA 6 1,50 - - - / - / -
9 17/18 EFL Cup NA 4 1,75 - - - / - / -
10 17/18 Community Shield NA - - - - - / - / -
/ /
1 3 / - / - 17.068'
2 540' <NA>
3 90' <NA>
4 139' <NA>
5 - <NA>
6 2.071' <NA>
7 230' <NA>
8 454' <NA>
9 341' <NA>
10 - <NA>
https://stackoverflow.com/questions/53770146
复制相似问题