r - 如何使用 R 从 php 网站上抓取一张大表
问题描述
我正在尝试从“https://www.metabolomicsworkbench.org/data/mb_structure_ajax.php”中抓取表格。
我在网上找到的代码(rvest)不起作用
library(rvest)
url <- "https://www.metabolomicsworkbench.org/data/mb_structure_ajax.php"
A <- url %>%
read_html() %>%
html_nodes(xpath='//*[@id="containerx"]/div[1]/table') %>%
html_table()
A 是“0 列表”
我应该如何修复此代码,或者有更好的方法吗?
提前致谢。
解决方案
页面源由JS生成。这是你要做的:
- 打开浏览器的开发工具并转到网络选项卡。
- 单击其中一页,看看发生了什么(我单击到第 4 页)。您可以看到该页面发送了一个 POST 请求
https://www.metabolomicsworkbench.org/data/mb_structure_tableonly.php
并获取它的内容。 以下是参数: - 模仿 POST 请求
rvest
。这是抓取所有页面的代码:
library(rvest)
url <- "https://www.metabolomicsworkbench.org/data/mb_structure_tableonly.php"
pg <- html_session(url)
data <-
purrr::map_dfr(
1:4288, # you might wanna change it to a small number to try first or scrape multiple times and combine data frames later, in case something happens in the middle
function(i) {
pg <- rvest:::request_POST(pg,
url,
body = list(
page = i
))
read_html(pg) %>%
html_node("table") %>%
html_table()
}
)
推荐阅读
- html - flex-flow 没有将我的 3 个元素放在列中,元素保留在默认行中?
- r - 如何将行中的变量更改为具有R中计数的列名
- firebase - 如何读取从firebase发送到app-measurement的数据
- c++ - 有没有办法在模板函数中拥有可变数量的类型名,比如参数包?
- sql - SQL - 输出 2 个表的所有可能关系?
- java - 方法 shuffle 中第 5 行的 LinkedList 运行时间
- ruby-on-rails - Rspec 请求规范:没有匹配的路由
- javascript - 像在 ES6 中一样扩展 ES5
- yarnpkg - 为 yarn 工作区中的子包安装依赖项并保存到 package.json
- autodesk-inventor - Inventor DA 模型无法使用参数更新