rvest: html_table() 仅拾取标题行。表有 0 行

Coo*_*Day 1 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()
Run Code Online (Sandbox Code Playgroud)

调用df结果为 7 列 0 行的 data.frame。我安装了检查器小工具,即使这样也告诉我这id = #stat-table是正确的。该网站的独特之处在于它不想获取表格数据?

作为一个单独的问题,如果我“查看页面源代码”,我可以看到页面上的所有数据,并且我不必用来RSelenium翻阅 DK、FD 或 yahoo 工资。看起来有些键很容易找到(例如查找“FD”>查找所有“玩家名称:”并在后面拾取字符等),但我不知道处理该页面的库/进程来源。有这方面的资源吗?

谢谢。

hrb*_*str 5

理论上,您可以从标签中提取数据<script>,然后使用 来处理它V8,但这也很容易使用splashr或 来完成seleniumPipes。我写了splashr所以我会证明:

\n\n
library(splashr)\nlibrary(rvest)\n\nstart_splash()\n\npg <- render_html(url="https://swishanalytics.com/optimus/nba/daily-fantasy-salary-changes?date=2017-11-25")\n\nhtml_node(pg, "table#stat-table") %>% \n  html_table() %>% \n  tibble::as_tibble() \n## # A tibble: 256 x 7\n##    Position          Player Salary         Change `Proj Fantasy Pts` `Avg Fantasy Pts`   Diff\n##       <chr>           <chr>  <chr>          <chr>              <dbl>             <chr>  <chr>\n##  1       PF      Thon Maker $3,900  +$600 (18.2%)              12.88             13.24  -0.36\n##  2       PG DeAndre Liggins $3,500  +$500 (16.7%)               9.68              7.80  +1.88\n##  3       PG   Elfrid Payton $6,400  +$700 (12.3%)              32.77             28.63  +4.14\n##  4        C   Jahlil Okafor $3,000 -$400 (-11.8%)               1.71             12.63 -10.92\n##  5       PF    John Collins $5,200   +$400 (8.3%)              29.65             24.03  +5.63\n##  6       SG     Buddy Hield $4,600  -$400 (-8.0%)              17.96             21.84  -3.88\n##  7       SF    Aaron Gordon $7,000   +$500 (7.7%)              32.49             36.91  -4.42\n##  8       PG    Kemba Walker $7,600  -$600 (-7.3%)              36.27             38.29  -2.02\n##  9       PG    Lou Williams $6,600  -$500 (-7.0%)              34.28             30.09  +4.19\n## 10       PG       Raul Neto $3,200   +$200 (6.7%)               6.81             10.57  -3.76\n## # ... with 246 more rows\n\nkillall_splash()\n
Run Code Online (Sandbox Code Playgroud)\n\n

BeautifulSoup 也不会读取此数据。好吧,您可以<script>以 JS 形式定位包含它的标签,并在 Python 上使用类似的 V8 引擎,但它不会比rvest.

\n\n

进一步扩展^^:

\n\n

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

\n\n

在此输入图像描述

\n\n

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

\n\n

具有 JS 渲染的 XHR 请求(或页面上的 JS+数据)的站点看起来像 ^^ 但您的定位不起作用 b/c read_html()(以及 BeautifulSoup 等效项)无法在没有帮助的情况下在页面上渲染 JavaScript一些渲染引擎。您可以尝试通过查看源代码和元素检查来判断是否发生这种情况。这是该网站的查看源代码,裁剪为很长的数据行 + JS + HTML,最终形成表格:

\n\n

在此输入图像描述

\n\n

我已经发布了许多关于如何定位这些<script>标签并使用V8. 使用splashrordecapitated更容易(如果它们已安装并工作)。

\n\n

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

\n\n
res <- system2("chrome", c("--headless", "--dump-dom", "https://swishanalytics.com/optimus/nba/daily-fantasy-salary-changes?date=2017-11-25"), stdout=TRUE)\n
Run Code Online (Sandbox Code Playgroud)\n\n

res然后变成纯 HTML,您可以阅读rvest并刮掉它。

\n\n

开发中的包 \xe2\x80\x94-\xc2\xa0 decapitated- 使 ^^ 变得不那么难看:

\n\n
install_github("hrbrmstr/decapitated")\nlibrary(decapitated)\nlibrary(rvest)\n\nchrome_version()\n## Google Chrome 63.0.3239.59 beta\n\npg <- chrome_read_html("https://swishanalytics.com/optimus/nba/daily-fantasy-salary-changes?date=2017-11-25")\n\nhtml_node(pg, "table#stat-table") %>% \n  html_table() %>% \n  tibble::as_tibble() \n## # A tibble: 256 x 7\n##    Position          Player Salary         Change `Proj Fantasy Pts` `Avg Fantasy Pts`   Diff\n##       <chr>           <chr>  <chr>          <chr>              <dbl>             <chr>  <chr>\n##  1       PF      Thon Maker $3,900  +$600 (18.2%)              12.88             13.24  -0.36\n##  2       PG DeAndre Liggins $3,500  +$500 (16.7%)               9.68              7.80  +1.88\n##  3       PG   Elfrid Payton $6,400  +$700 (12.3%)              32.77             28.63  +4.14\n##  4        C   Jahlil Okafor $3,000 -$400 (-11.8%)               1.71             12.63 -10.92\n##  5       PF    John Collins $5,200   +$400 (8.3%)              29.65             24.03  +5.63\n##  6       SG     Buddy Hield $4,600  -$400 (-8.0%)              17.96             21.84  -3.88\n##  7       SF    Aaron Gordon $7,000   +$500 (7.7%)              32.49             36.91  -4.42\n##  8       PG    Kemba Walker $7,600  -$600 (-7.3%)              36.27             38.29  -2.02\n##  9       PG    Lou Williams $6,600  -$500 (-7.0%)              34.28             30.09  +4.19\n## 10       PG       Raul Neto $3,200   +$200 (6.7%)               6.81             10.57  -3.76\n## # ... with 246 more rows\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n