如何使用 R 从 php 网站抓取大表

cod*_*rer 0 r web-scraping scrape rvest

我正在尝试从“https://www.metabolomicsworkbench.org/data/mb_struct_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()
Run Code Online (Sandbox Code Playgroud)

A 是“0 的列表”

我应该如何修复此代码或者有更好的方法吗?

提前致谢。

xwh*_*ght 5

页面源码由JS生成。这是你要做的:

  1. 打开浏览器的开发工具并转到“网络”选项卡。 在此输入图像描述
  2. 单击其中一页,看看发生了什么(我单击到第 4 页)。可以看到页面发送了一个POST请求https://www.metabolomicsworkbench.org/data/mb_structure_tableonly.php并获取了它的内容。 在此输入图像描述 以下是参数: 在此输入图像描述
  3. 模仿 的 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() 
    }
  )

Run Code Online (Sandbox Code Playgroud)