2017-08-05 97 views
2

我正在寻找从化学数据库中使用R,主要是name,CAS Numbermolecular weight现在刮一些数据。但是,我无法获取rvest来提取我正在查找的信息。这是我到目前为止的代码:Rvest web scrape返回空字符

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",但都没有给我我正在寻找的东西。

Screenshot of SelectorGadget and Inspector

+0

您正试图让'Depositor-Supplied Synonyms'正确吗? – AK88

+0

上面的例子只是试图检索主页上的物质名称,但如果可能的话,我也希望检索存款人提供的同义词。 –

回答

2

我最近碰到使用rvest刮PubChem识别相同的问题。问题在于,当您向下滚动页面时,页面上的信息会使用JavaScript呈现,因此rvest只能从页面获取最少信息。

虽然有几个解决方法。获取R所需信息的最简单方法是使用名为webchem的R程序包。

如果您正在查找的名称,CAS号码,分子量,那么你可以这样做:可以使用此API can be found here.不幸的ISN中提取的化合物性质的

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

的完整列表通过这个API获取CAS号码的财产,但webchem给了我们另一种方式来查询使用化学品翻译服务

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来按照原来的意图刮取它。这是我仍在努力的事情,因为这是我第一次使用网络刮板。

我仍然是这个领域的初学者,但希望这可以帮助你一点。