r - 需要帮助抓取一个大档案
问题描述
对于一个学校项目,我必须抓取一个不成问题的网站。但是为了让它被称为 BigData,我想刮掉整个档案(这是过去 5 年)。url 中唯一更改的是 url 末尾的日期,但我不知道如何编写一个仅更改末尾日期的脚本。
我正在使用的网站是:https ://www.ongelukvandaag.nl/archief/ 。
我需要的日期是从 01-01-2015 到 24-09-2020。我已经弄清楚了代码的第一部分,我可以抓取一页。我是使用 R 的初学者,想知道是否有人可以帮助我。代码如下所示。提前致谢!
这是我到目前为止得到的,错误在代码下面。
install.packages("XML")
install.packages("reshape")
install.packages("robotstxt")
install.packages("Rcrawler")
install.packages("RSelenium")
install.packages("devtools")
install.packages("exifr")
install.packages("Publish")
devtools::install_github("r-lib/xml2")
library(rvest)
library(dplyr)
library(xml)
library(stringr)
library(jsonlite)
library(xml12)
library(purrr)
library(tidyr)
library(reshape)
library(XML)
library(robotstxt)
library(Rcrawler)
library(RSelenium)
library(ps)
library(devtools)
library(exifr)
library(Publish)
#Create an url object
url<-"https://www.ongelukvandaag.nl/archief/%d "
#Verify the web can be scraped
paths_allowed(paths = c(url))
#Obtain the links for every day from 2015 to 2020
map_df(2015:2020, function(i){
page<-read_html(sprintf(url,i))
data.frame(Links = html_attr(html_nodes(page, ".archief a"),"href"))
}) -> Links %>%
Links$Links<-paste("https://www.ongelukvandaag.nl/",Links$Links,sep = "")
#Scrape what you want from each link:
d<- map(Links$Links, function(x) {
Z <- read_html(x)
Date <- Z %>% html_nodes(".text-muted") %>% html_text(trim = TRUE) # Last update
All_title <- Z %>% html_nodes("h2") %>% html_text(trim = TRUE) # Title
return(tibble(All_title,Date))
})
我得到的错误:
Error in open.connection(x, "rb") : HTTP error 400.
in paste("https://www.ongelukvandaag.nl/", Links$Links, sep = "") : object 'Links' not found >
in map(Links$Links, function(x) { : object 'Links' not found
并且包“xml12”和“xml”在这个版本的 RStudio 中不起作用
解决方案
看看我的代码和我的评论:
library(purrr)
library(rvest) # don't load a lot of libraries if you don't need them
url <- "https://www.ongelukvandaag.nl/archief/"
bigdata <-
map_dfr(
2015:2020,
function(year){
year_pg <- read_html(paste0(url, year))
list_dates <- year_pg %>% html_nodes(xpath = "//div[@class='archief']/a") %>% html_text() # in case some dates are missing
map_dfr(
list_dates,
function(date) {
pg <- read_html(paste0(url, date))
items <- pg %>% html_nodes("div.full > div.row")
items <- items[sapply(items, function(x) length(x %>% html_node(xpath = "./descendant::h2"))) > 0] # drop NA items
data.frame(
date = date,
title = items %>% html_node(xpath = "./descendant::h2") %>% html_text(),
update = items %>% html_node(xpath = "./descendant::h4") %>% html_text(),
image = items %>% html_node(xpath = "./descendant::img") %>% html_attr("src")
)
}
)
}
)
推荐阅读
- cyber-ark - 使用可信证书从 CyberArk 检索密码
- javascript - 如何在 dygraph 的范围选择器中设置选定范围
- maven - 在 Maven 发布期间更新属性:准备
- python - 如何在 Python 中保存每个会话的 Cookie?
- jenkins - Jenkins在选择参数中包含文件参数和字符串参数
- javascript - javascript多维数组过滤元素
- python - 成功创建超级用户后无法登录 Heroku 管理面板
- javascript - 如何在不刷新页面的情况下打开链接
- android - 反应原生加载图像并存储在设备中?
- python - Azure Function:如何使用本地调试模式和使用 Python 的 Azure Functions 将我的日志写入 Azure Application Insights?