2017-08-05 93 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來按照原來的意圖刮取它。這是我仍在努力的事情,因爲這是我第一次使用網絡刮板。

我仍然是這個領域的初學者,但希望這可以幫助你一點。