Rvest Web Scrape возвращает пустой символ

Я ищу, чтобы собрать некоторые данные из химической базы данных, используя 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 возвращает только символ (пустой). я использую SelectorGadget чтобы получить узел HTML, но я заметил, что SelectorGadget дает мне другой узел, чем то, что делает инспектор в Google Chrome. Я пробовал оба ".short .breakword" а также ".summary-title short .breakword" в этой строке кода, но ни один не дает мне то, что я ищу.

Снимок экрана SelectorGadget и инспектора

1 ответ

Я недавно столкнулся с теми же проблемами, используя rvest скрести ПабХим. Проблема в том, что информация на странице отображается с использованием javascript при прокрутке страницы вниз, поэтому rvest получает только минимальную информацию со страницы.

Есть несколько обходных путей, хотя. Самый простой способ получить нужную информацию в R - это использовать пакет R под названием webchem,

Если вы ищете имя, номер CAS и молекулярный вес, то вы можете сделать что-то вроде:

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

Полный список составных свойств, которые можно извлечь с помощью этого API, можно найти здесь. К сожалению, через этот API нет свойства для получения номера CAS, но webchem дает нам еще один способ запросить это с помощью службы химического перевода.

chem_cas <- cts_convert(query = '1', from = 'CID', to = 'CAS')

Второй способ получить информацию со страницы, которая немного более надежна, но с которой не так просто работать, - это получить информацию из API JSON.

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, чтобы отобразить полный html-вывод страницы PubChem, а затем использовать rvest поцарапать это, как вы изначально хотели. Это то, над чем я все еще работаю, так как я впервые использую веб-скребки.

Я все еще новичок в этой области, но, надеюсь, это вам немного поможет.

Другие вопросы по тегам