Rvest 网络抓取 returns 空字符
Rvest web scrape returns empty character
我希望使用 R 从化学数据库中抓取一些数据,目前主要是 name
、CAS Number
和 molecular 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 仅 returns 字符(空)。我正在使用 SelectorGadget
获取 HTML 节点,但我注意到 SelectorGadget
给我的节点与 Inspector 在 Google Chrome 中所做的不同。我在那行代码中尝试了 ".short .breakword"
和 ".summary-title short .breakword"
,但都没有给我想要的东西。
我最近 运行 使用 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
为我们提供了另一种查询方式,使用 Chemical Translation Service.
chem_cas <- 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,您可以从页面解析更多信息,但不是全部。例如,在文献、专利和生物分子相互作用和途径等部分,这些信息部分将不会完全显示在 JSON 信息中。
从页面获取所有信息的最终也是最全面的方法是使用 Scrapy 或 PhantomJS 之类的东西呈现 PubChem 页面的完整 html 输出,然后使用 rvest
抓取就像您最初打算的那样。这是我仍在努力的事情,因为这也是我第一次使用网络抓取工具。
我在这个领域仍然是初学者,但希望这对您有所帮助。
我希望使用 R 从化学数据库中抓取一些数据,目前主要是 name
、CAS Number
和 molecular 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 仅 returns 字符(空)。我正在使用 SelectorGadget
获取 HTML 节点,但我注意到 SelectorGadget
给我的节点与 Inspector 在 Google Chrome 中所做的不同。我在那行代码中尝试了 ".short .breakword"
和 ".summary-title short .breakword"
,但都没有给我想要的东西。
我最近 运行 使用 rvest
抓取 PubChem 遇到了同样的问题。问题是页面上的信息是在您向下滚动页面时使用 javascript 呈现的,因此 rvest
仅从页面获取最少的信息。
虽然有一些解决方法。将所需信息获取到 R 中的最简单方法是使用名为 webchem
.
如果您要查找名称、CAS 编号和分子量,则可以执行以下操作:
library(webchem)
chem_properties <- pc_prop(1, properties = c('IUPACName', 'MolecularWeight'))
可以使用此 api can be found here. 提取的化合物属性的完整列表不幸的是,没有 属性 通过此 api 获取 CAS 编号,但是 webchem
为我们提供了另一种查询方式,使用 Chemical Translation Service.
chem_cas <- 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,您可以从页面解析更多信息,但不是全部。例如,在文献、专利和生物分子相互作用和途径等部分,这些信息部分将不会完全显示在 JSON 信息中。
从页面获取所有信息的最终也是最全面的方法是使用 Scrapy 或 PhantomJS 之类的东西呈现 PubChem 页面的完整 html 输出,然后使用 rvest
抓取就像您最初打算的那样。这是我仍在努力的事情,因为这也是我第一次使用网络抓取工具。
我在这个领域仍然是初学者,但希望这对您有所帮助。