我正在尝试在3,600多个Wikipedia页面上收集统计数据以供工作。我正在尝试使用R中的网页抓取来自动化它。
我直接在R中提取HTML代码时遇到问题。
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:请原谅我的法语。这是我的母语。
答案 0 :(得分:2)
对于那些也希望从Wikipedia页面提取数据的人,我发现了一些可以直接从R获取数据的软件包,可以帮助我规避403问题。
我使用以下软件包:
这是我用于收集文章基本信息的代码:
# 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提供的一些特定数据,我现在使用编码,如下所示直接从Wikipedia获取它:
# 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中的第二个项目,因此我可能会更改收集的数据,以便更轻松地查找数据。