rvest:html_table()只获取标题行。表有0行

时间:2017-11-30 18:21:38

标签: r rvest

我正在学习如何使用rvest进行网络搜索,并且我遇到了一些问题。具体来说,代码只是拾取标题行。

library(rvest)
library(XML)

URL1 <- "https://swishanalytics.com/optimus/nba/daily-fantasy-salary-changes?date=2017-11-25"
df <- URL1 %>% read_html() %>% html_node("#stat-table") %>% html_table()

调用df会产生一个包含7列和0行的data.frame。我安装了检查器小工具,甚至告诉我id = #stat-table是正确的。这个网站有什么独特之处,它不想提取表格数据?

作为一个单独的问题,如果我查看页面来源&#34;,我可以看到页面上的所有数据,我不必使用RSelenium来翻阅DK, FD,或雅虎的工资。看起来有很容易找到的键(例如找到&#34; FD&#34;&gt;找到所有&#34;玩家名称:&#34;然后拿起字符等),但我不知道#39;知道处理页面源的库/进程。有没有这方面的资源?

感谢。

1 个答案:

答案 0 :(得分:3)

理论上,您可以从<script>代码中提取数据,然后使用V8进行处理,但使用splashr或{{1}也很容易}}。我写了seleniumPipes所以我会表明:

splashr

BeautifulSoup也不会读取此数据。好吧,你可以以JS格式定位包含它的library(splashr) library(rvest) start_splash() pg <- render_html(url="https://swishanalytics.com/optimus/nba/daily-fantasy-salary-changes?date=2017-11-25") html_node(pg, "table#stat-table") %>% html_table() %>% tibble::as_tibble() ## # A tibble: 256 x 7 ## Position Player Salary Change `Proj Fantasy Pts` `Avg Fantasy Pts` Diff ## <chr> <chr> <chr> <chr> <dbl> <chr> <chr> ## 1 PF Thon Maker $3,900 +$600 (18.2%) 12.88 13.24 -0.36 ## 2 PG DeAndre Liggins $3,500 +$500 (16.7%) 9.68 7.80 +1.88 ## 3 PG Elfrid Payton $6,400 +$700 (12.3%) 32.77 28.63 +4.14 ## 4 C Jahlil Okafor $3,000 -$400 (-11.8%) 1.71 12.63 -10.92 ## 5 PF John Collins $5,200 +$400 (8.3%) 29.65 24.03 +5.63 ## 6 SG Buddy Hield $4,600 -$400 (-8.0%) 17.96 21.84 -3.88 ## 7 SF Aaron Gordon $7,000 +$500 (7.7%) 32.49 36.91 -4.42 ## 8 PG Kemba Walker $7,600 -$600 (-7.3%) 36.27 38.29 -2.02 ## 9 PG Lou Williams $6,600 -$500 (-7.0%) 34.28 30.09 +4.19 ## 10 PG Raul Neto $3,200 +$200 (6.7%) 6.81 10.57 -3.76 ## # ... with 246 more rows killall_splash() 标签,并在Python上使用类似的V8引擎,但是它不能比<script>更容易实现。< / p>

进一步扩展^^:

大多数抓取指南会告诉您执行“Inspect Element”以最终找到要定位的XPath或CSS选择器。检查该表的随机行显示:

enter image description here

对于“普通”网站,这通常有效。

使用JS呈现的XHR请求(或页面上的JS +数据)的网站看起来像^^但是您的定位无效b / c rvest(并且BeautifulSoup等)无法呈现JavaScript在没有某些渲染引擎帮助的页面上。您可以尝试通过执行View Source以及元素检查来判断是否发生了这种情况。这是该网站的查看源裁剪为最终的数据+ JS + HTML,最终成为表格:

enter image description here

我发布了大量有关如何定位这些read_html()代码并使用<script>的SO答案。使用V8splashr会更容易(如果它们已安装并正常工作)。

如果您不想处理Docker并使用最新版本的Chrome,您也可以按照here的指示进行无头工作并执行以下操作:

decapitated

res <- system2("chrome", c("--headless", "--dump-dom", "https://swishanalytics.com/optimus/nba/daily-fantasy-salary-changes?date=2017-11-25"), stdout=TRUE) 然后变为纯HTML,您可以使用res阅读并删除。

正在开发的包 - rvest - 使得^^不那么难看:

decapitated

注意:由于新权限和沙盒,无头Chrome在High Sierra上遇到问题。它适用于较旧的macOS系统和Windows / Linux。您只需要正确的版本和正确的环境变量集。