Как исправить ошибку HTTP 403 при веб-раскраске в R? - PullRequest
2 голосов
/ 01 декабря 2019

Я пытаюсь собрать статистические данные на 3600 + страницах Википедии для работы. Я пытаюсь автоматизировать его с помощью веб-проверки в R.

У меня проблема с извлечением HTML-кода непосредственно в R.

download_html("xtools.wmflabs.org/articleinfo/fr.wikipedia.org/1re_Convention_nationale_acadienne")

И вот что говорит мне консоль:

download_html("xtools.wmflabs.org/articleinfo/fr.wikipedia.org/1re_Convention_nationale_acadienne")
Error in curl::curl_download(url, file, quiet = quiet, mode = mode, handle = handle) : HTTP error 403.

Какова возможная причина, по которой это не работает?

Когда я сохраняю HTML в виде файла и запускаю его через R, все работает отлично, и я получаю создать фрейм данных сРезультаты:

# ID webpage link first
setwd("C:\\Users\\judit\\Scraping dans R")
webpage <- read_html("HTML_1e.html")
# read_html("https://xtools.wmflabs.org/articleinfo/fr.wikipedia.org/1re_Convention_nationale_acadienne?uselang=fr")


# Statistiques: extraction ----

# Stats: titre
titre <- html_nodes(webpage, ".back-to-search+ a")
titre <- html_text(titre, trim=TRUE)

# Stats: Taille de page
taille <- html_nodes(webpage, ".col-lg-5 tr:nth-child(3) td+ td")
taille <- html_text(taille, trim=TRUE)

# Stats: Total des modifications
mod <- html_nodes(webpage, ".col-lg-5 tr:nth-child(4) td+ td")
mod <- html_text(mod, trim=TRUE)

# Stats: Nombre de redacteurs
red <- html_nodes(webpage, ".col-lg-5 tr:nth-child(5) td+ td")
red <- html_text(red)

# Stats: Evaluation
evaluation <- html_nodes(webpage, ".col-lg-5 tr:nth-child(6) td+ td")
evaluation <- html_text(evaluation, trim=TRUE)

# Stats: Liens vers cette page
liens_vers <- html_nodes(webpage, ".stat-list--group tr:nth-child(2) a")
liens_vers <- html_text(liens_vers, trim=TRUE)

# Stats: Liens depuis cette page
liens_depuis <- html_nodes(webpage, ".col-lg-offset-1 .stat-list--group tr:nth-child(4) td+ td")
liens_depuis <- html_text(liens_depuis, trim=TRUE)

# Stats: Mots
mots <- html_nodes(webpage, ".col-lg-3 tr:nth-child(3) td+ td")
mots <- html_text(mots, trim=TRUE)

wikipedia <- data.frame(titre, taille, red, mod, evaluation, liens_vers, liens_depuis)

Любой совет с благодарностью! PS: простите мой французский в коде. Это мой первый язык.

1 Ответ

2 голосов
/ 02 декабря 2019

Для тех, кто ищет извлечение данных со страниц Википедии, я нашел несколько пакетов, которые помогают мне обойти проблему 403, напрямую получая мои данные от R.

Я использую следующие пакеты:

  • WikipediR
  • WikipediaR

Это мой код для сбора основной информации о статье:

# Basic information ----

library("WikipediR")

pageinfo <- page_info(language = "fr", 
                      project = "wikipedia", 
                      page = "1re Convention nationale acadienne",
                      properties = c("url"),
                      clean_response = T)

pageinfo_df1=data.frame(pageinfo)
pageinfo_df2=data.frame(id=pageinfo_df1$pageid, title=pageinfo_df1$title, lang=pageinfo_df1$pagelanguage, sizeBytes=pageinfo_df1$length, url=pageinfo_df1$fullurl)

А затем для сбора некоторых конкретных данных, которыебыл доступен через XTools, теперь я использую кодирование, чтобы получить его напрямую из Википедии следующим образом:

# Links from this article
links_page <- links(page = "1re Convention nationale acadienne", domain = "fr")
links_page_df <- as.data.frame(links_page$links)
nrow(links_page_df)

Некоторые данные довольно сложно собрать без получения ошибок 403 или 404 во время веб-скрапинга. Поскольку это всего лишь мой второй проект в R, я могу изменить собираемые данные, чтобы с их помощью было легче найти данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...