【问题标题】:Rvest web scrape returns empty characterRvest 网页抓取返回空字符
【发布时间】:2023-11-22 08:20:01
【问题描述】:

我希望使用 R 从化学数据库中抓取一些数据,目前主要是 nameCAS Numbermolecular weight。但是,我无法让rvest 提取我正在寻找的信息。这是我到目前为止的代码:

library(rvest)
library(magrittr)

# Read HTML code from website
# I am using this format because I ultimately hope to pull specific items from several different websites
webpage <- read_html(paste0("https://pubchem.ncbi.nlm.nih.gov/compound/", 1))

# Use CSS selectors to scrape the chemical name
chem_name_html <- webpage %>%
                  html_nodes(".short .breakword") %>%
                  html_text()

# Convert the data to text
chem_name_data <- html_text(chem_name_html)

但是,当我尝试创建 name_html 时,R 只返回字符(空)。我使用SelectorGadget 来获取HTML 节点,但我注意到SelectorGadget 给了我一个不同于Inspector 在Google Chrome 中所做的节点。我在这行代码中尝试了".short .breakword"".summary-title short .breakword",但都没有给我我想要的东西。

【问题讨论】:

  • 你想得到Depositor-Supplied Synonyms 对吗?
  • 上面的例子只是试图在主页上检索物质名称,但如果可能的话,我也想检索 Depositor-Supplied Synonyms。

标签: r web-scraping rvest pubchem


【解决方案1】:

我最近在使用 rvest 抓取 PubChem 时遇到了同样的问题。问题是当您向下滚动页面时,页面上的信息是使用 javascript 呈现的,因此rvest 只能从页面中获取最少的信息。

虽然有一些解决方法。将所需信息导入 R 的最简单方法是使用名为 webchem 的 R 包。

如果您要查找名称、CAS 编号和分子量,则可以执行以下操作:

library(webchem) chem_properties <- pc_prop(1, properties = c('IUPACName', 'MolecularWeight'))

可以使用此 api 提取的复合属性的完整列表 can be found here. 不幸的是,没有通过此 api 获取 CAS 编号的属性,但 webchem 为我们提供了另一种使用 查询的方法化学翻译服务.

chem_cas &lt;- cts_convert(query = '1', from = 'CID', to = 'CAS')

从页面获取信息的第二种方法更强大但不太容易使用,即从 JSON api 获取信息。

library(jsonlite) chem_json <- read_json(paste0("https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/", "1", "/JSON/?response_type=save$response_basename=CID_", "1"))

使用该命令,您将获得一个列表列表,我必须编写一个复杂的脚本来解析我需要从页面获取的信息。如果您熟悉 JSON,则可以从页面解析更多信息,但不是全部。例如,在 LiteraturePatentsBiomolecular Interactions and Pathways 等部分中,这些部分中的信息不会完全显示在 JSON 中信息。

从页面获取所有信息的最后也是最全面的方法是使用 Scrapy 或 PhantomJS 之类的工具来呈现 PubChem 页面的完整 html 输出,然后使用 rvest 按照您最初的意图进行抓取。这是我仍在努力的事情,因为这也是我第一次使用网络爬虫。

我还是这个领域的初学者,但希望这对你有所帮助。

【讨论】:

    最近更新 更多