анализировать результаты поиска Google Scholar, очищенные с помощью rvest - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь использовать rvest, чтобы очистить одну страницу результатов поиска Google Scholar до фрейма данных автора, названия статьи, года и названия журнала.

Упрощенный воспроизводимый пример ниже представляет собой код, выполняет поиск в Google Scholar по образцу терминов «сохранение высших хищников».

Примечание: чтобы оставаться в рамках Условий обслуживания, я хочу обрабатывать только первую страницу результатов поиска, которые я получил бы при ручном поиске. Я не прошу автоматизировать очистку дополнительных страниц.

Следующий код уже работает для извлечения:

  • автор
  • название статьи
  • год

но у него нет:

  • заголовок журнала

Я хотел бы извлечь заголовок журнала и добавить его к выходным данным.

library(rvest)
library(xml2)
library(selectr)
library(stringr)
library(jsonlite)

url_name <- 'https://scholar.google.com/scholar?hl=en&as_sdt=0%2C38&q=apex+predator+conservation&btnG=&oq=apex+predator+c'
wp <- xml2::read_html(url_name)
# Extract raw data
titles <- rvest::html_text(rvest::html_nodes(wp, '.gs_rt'))
authors_years <- rvest::html_text(rvest::html_nodes(wp, '.gs_a'))
# Process data
authors <- gsub('^(.*?)\\W+-\\W+.*', '\\1', authors_years, perl = TRUE)
years <- gsub('^.*(\\d{4}).*', '\\1', authors_years, perl = TRUE)
# Make data frame
df <- data.frame(titles = titles, authors = authors, years = years, stringsAsFactors = FALSE)

df

источник: { ссылка }

Таким образом, вывод этого кода выглядит следующим образом:

#>                                                                                                                                                   titles
#> 1                                                                                    [HTML][HTML] Saving large carnivores, but losing the apex predator?
#> 2                               Site fidelity and sex-specific migration in a mobile apex predator: implications for conservation and ecosystem dynamics
#> 3                  Effects of tourism-related provisioning on the trophic signatures and movement patterns of an apex predator, the Caribbean reef shark

#>                                           authors years
#> 1                  A Ordiz, R Bischof, JE Swenson  2013
#> 2  A Barnett, KG Abrantes, JD Stevens, JM Semmens  2011

Два вопроса:

  1. Как я могу добавить столбец с заголовком журнала, извлеченным из необработанных данных?
  2. Есть ли ссылка, где я могу прочитать и узнать больше о том, как разработать, как извлечь другие поля для себя, поэтому мне не нужно здесь спрашивать?

1 Ответ

1 голос
/ 16 июня 2020

Один из способов добавить их:

library(rvest)
library(xml2)
library(selectr)
library(stringr)
library(jsonlite)

url_name <- 'https://scholar.google.com/scholar?hl=en&as_sdt=0%2C38&q=apex+predator+conservation&btnG=&oq=apex+predator+c'
wp <- xml2::read_html(url_name)
# Extract raw data
titles <- rvest::html_text(rvest::html_nodes(wp, '.gs_rt'))
authors_years <- rvest::html_text(rvest::html_nodes(wp, '.gs_a'))
# Process data
authors <- gsub('^(.*?)\\W+-\\W+.*', '\\1', authors_years, perl = TRUE)
years <- gsub('^.*(\\d{4}).*', '\\1', authors_years, perl = TRUE)


leftovers <- authors_years %>% 
  str_remove_all(authors) %>% 
  str_remove_all(years)


journals <- str_split(leftovers, "-") %>% 
            map_chr(2) %>% 
            str_extract_all("[:alpha:]*") %>% 
            map(function(x) x[x != ""]) %>% 
            map(~paste(., collapse = " ")) %>% 
            unlist()

# Make data frame
df <- data.frame(titles = titles, authors = authors, years = years, journals = journals, stringsAsFactors = FALSE)

Для вашего второго вопроса: гаджет селектора css chrome extension хорош для получения селекторов css элементов, которые вы хотите. Но в вашем случае все элементы имеют один и тот же класс css, поэтому единственный способ распутать их - использовать регулярное выражение. Так что я думаю немного узнать о селекторах css и регулярном выражении :)

...