我也希望解决方案依赖以下软件包-
library(tidyverse)
library(rvest)
library(stringr)
library(purrr)
library(lubridate)
我的最终目标是抓取前5页中的每篇文章,以提供一个函数来对其进行解析并生成一个数据框。我想从第一页开始,我想使用“下一页”按钮在所有5页上移动,但是我很难把注意力集中在做这些事情的方法上第一页。我已经看到在类似的上下文中使用了各种选项,例如“ follow_link”和“ sprintf”以及“ html_session”,但是还没有足够的理解这些示例以将其概括化,然后在这里使用它们。
看一个类似的例子,我给人的印象是,如果在html_nodes函数中输入正确的信息,则该结构应该可以工作。但是,到目前为止,我没有尝试过的标签组合还不能像示例所示那样成功。
source_col <- https://www.presidency.ucsb.edu/advanced-search?field-keywords=%22Labor%22&field-keywords2=&field-keywords3=&from%5Bdate%5D=&to%5Bdate%5D=&person2=&items_per_page=100
map_df(1:4, function(i){
page <- read_html(sprintf(source_col, i))
data.frame(Doc_ID = html_text(html_nodes(page, "")))
}) -> Labor_References
如果有人可以给我任何其他替代方法的指导(并简要解释它们的工作原理?),或者如何解决现有的问题,我将非常感谢。如果对此尚不清楚,我深表歉意。我是R和编码领域的新手。
答案 0 :(得分:0)
如果导航到下一页,您将看到URL更新为包括&page=1
。我们可以利用它(从page = 0开始)并通过更新url遍历每个页面。
library(dplyr)
root <- 'https://www.presidency.ucsb.edu/advanced-search?field-keywords=%22Labor%22&field-keywords2=&field-keywords3=&from%5Bdate%5D=&to%5Bdate%5D=&person2=&items_per_page=100&page='
pages <- 5
df <- tibble()
for(i in seq_len(pages)){
# pages start from 0 so subtract 1
page <- paste0(root,i-1) %>%
read_html() %>%
html_nodes('table') %>%
html_table()
tmp <- page[[1]]
df <- bind_rows(df, tmp)
}
df
## A tibble: 500 x 3
# Date Related `Document Title`
# <chr> <chr> <chr>
# 1 Dec 05, 18… James K. Polk Fourth Annual Messageof affairs in California. Labor commands a most exorbitant …
# 2 Jan 24, 18… Franklin Pier… "Special Messagetemporarily to the \"Shawnee Manual Labor School\" (or mission). and …"
# 3 Dec 03, 18… Abraham Linco… First Annual Message
# 4 Dec 01, 18… Abraham Linco… Second Annual Messageis mathematically certain. Labor is like any other commodity …