R Webscraping RCurl и httr Контент - PullRequest
0 голосов
/ 01 июня 2018

Я немного узнал о веб-скрепинге и у меня возникли некоторые сомнения относительно двух пакетов (httr и RCurl), я пытаюсь получить код из журнала (ISSN) на веб-сайте Researchgate, и я наткнулся наситуация.При извлечении контента с сайта с помощью httr и RCurl я получаю ISSN в пакете RCurl, а в httr моя функция возвращает значение NULL, может кто-нибудь сказать мне, почему это?по моему мнению, обе функции должны были работать.Следуйте приведенному ниже коду.

library(rvest)
library(httr)
library(RCurl)

url <- "https://www.researchgate.net/journal/0730-0301_Acm_Transactions_On_Graphics"

########
# httr #
########

conexao <- GET(url)
conexao_status <- http_status(conexao)
conexao_status

content(conexao, as = "text", encoding = "utf-8") %>% read_html() -> webpage1

ISSN <- webpage1 %>%
  html_nodes(xpath = '//*/div/div[2]/div[1]/div[1]/table[2]/tbody/tr[7]/td') %>%
  html_text %>%
  str_to_title() %>%
  str_split(" ") %>%
  unlist
ISSN

########
# RCurl #
########

options(RCurlOptions = list(verbose = FALSE, 
                            capath = system.file("CurlSSL", "cacert.pem", package = "RCurl"), 
                            ssl.verifypeer = FALSE))

webpage <- getURLContent(url) %>% read_html()

ISSN <- webpage %>%
  html_nodes(xpath = '//*/div/div[2]/div[1]/div[1]/table[2]/tbody/tr[7]/td') %>%
  html_text %>%
  str_to_title() %>%
  str_split(" ") %>%
  unlist
ISSN

sessionInfo () R версии 3.5.0 (2018-04-23) Платформа: x86_64-w64-mingw32 / x64 (64-разрядная версия) Работаетв: Windows> = 8 x64 (сборка 9200)

Продукты матрицы: по умолчанию

языковой стандарт: [1] LC_COLLATE = португальский_Бразилия.1252 LC_CTYPE = португальский_Бразилия.1252 LC_MONETARY = португальский_Бразиль.1252[4] LC_NUMERIC = C LC_TIME = Португальский_Бразилия.1252

прикрепленные базовые пакеты: [1] stats graphics grDevices использует
база методов наборов данных

другие вложенные пакеты: [1] testit_0.7dplyr_0.7.4
progress_1.1.2 readxl_1.1.0 stringr_1.3.0 RCurl_1.95-4.10 bitops_1.0-6 [8] httr_1.3.1 rvest_0.3.2 xml2_1.2.0
jsonlite_1.5

загруженочерез пространство имен (и не прикреплено): [1] Rcpp_0.12.16
bindr_0.1.1 magrittr_1.5 R6_2.2.2 rlang_0.2.0
tools_3.5.0 [7] yaml_2.1.19 assertthat_0.2.0 tibble_1.4.2 bindrcpp_0.2.2 curl_3.2 glue_1.2.0
[13] stringi_1.1.7 pillar_1.2.2 compiler_3.5.0
cellranger_1.1.0 prettyunits_1.0.2 pkgconfig_2.0.1

1 Ответ

0 голосов
/ 02 июня 2018

Поскольку тип содержимого JSON, а не HTML, вы не можете использовать read_html() для него:

> conexao
Response [https://www.researchgate.net/journal/0730-0301_Acm_Transactions_On_Graphics]
Date: 2018-06-02 03:15
Status: 200
Content-Type: application/json; charset=utf-8
Size: 328 kB

Используйте вместо этого fromJSON() для извлечения issn:

library(jsonlite)
result <- fromJSON(content(conexao, as = "text", encoding = "utf-8") )
result$result$data$journalFullInfo$data$issn

результат:

> result$result$data$journalFullInfo$data$issn
[1] "0730-0301"
...