首页 > 解决方案 > 如何使用 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 列表”

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

提前致谢。

标签: rweb-scrapingrvestscrape

解决方案


页面源由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() 
    }
  )


推荐阅读