Webscraping与R“查看更多”的连续页面
我是R的新手,需要在这个网站上的帖子上刮掉标题和日期 使用rvest,我能够编写基本代码来获取信息:Webscraping与R“查看更多”的连续页面,r,web-scraping,rvest,R,Web Scraping,Rvest,我是R的新手,需要在这个网站上的帖子上刮掉标题和日期 使用rvest,我能够编写基本代码来获取信息: url <- 'https://www.healthnewsreview.org/?post_type=news-release-review&s=' webpage <- read_html(url) date_data_html <- html_nodes(webpage,'span.date') date_data <- html_text(date_dat
url <- 'https://www.healthnewsreview.org/?post_type=news-release-review&s='
webpage <- read_html(url)
date_data_html <- html_nodes(webpage,'span.date')
date_data <- html_text(date_data_html)
head(date_data)
webpage <- read_html(url)
title_data_html <- html_nodes(webpage,'h2')
title_data <- html_text(title_data_html)
head(title_data)
但由于该网站一开始只显示10个项目,然后你必须点击查看更多,我不知道如何刮整个网站。谢谢 引入第三方依赖关系应作为最后手段。埃文斯认为硒是唯一的解决方案,在绝大多数情况下,包括现在,硒本来是不必要的。对于那些使用可怕技术(如SharePoint)的糟糕网站来说,这是必要的,因为在没有浏览器上下文的情况下维护状态是非常痛苦的 如果我们从主页开始:
library(rvest)
pg <- read_html("https://www.healthnewsreview.org/news-release-reviews/")
我想你是想把这些内容删掉,那就去做吧
但是,还有一个讨厌的“查看更多”按钮
当您单击它时,它会发出此POST请求:
通过使用,我们可以将其转换为一个可调用的httr函数,鉴于此任务的不可能性,该函数可能不存在。我们可以使用分页参数将该函数调用包装到另一个函数中:
view_more <- function(current_offset=10) {
httr::POST(
url = "https://www.healthnewsreview.org/wp-admin/admin-ajax.php",
httr::add_headers(
`X-Requested-With` = "XMLHttpRequest"
),
body = list(
action = "viewMore",
current_offset = as.character(as.integer(current_offset)),
page_id = "22332",
btn = "btn btn-gray",
active_filter = "latest"
),
encode = "form"
) -> res
list(
links = httr::content(res) %>%
html_nodes("div.item-content") %>%
html_attr("onclick") %>%
gsub("^window.location.href='|'$", "", .),
next_offset = current_offset + 4
)
}
我们可以将新的偏移量传递给另一个调用:
y <- view_more(x$next_offset)
str(y)
## List of 2
## $ links : chr [1:4] "https://www.healthnewsreview.org/news-release-review/sweeping-claims-based-on-a-single-case-study-of-advanced-c"| __truncated__ "https://www.healthnewsreview.org/news-release-review/false-claims-of-benefit-weaken-news-release-on-experimenta"| __truncated__ "https://www.healthnewsreview.org/news-release-review/contrary-to-claims-heart-scans-dont-save-lives-but-subsequ"| __truncated__ "https://www.healthnewsreview.org/news-release-review/breastfeeding-for-stroke-prevention-kudos-to-heart-associa"| __truncated__
## $ next_offset: num 18
你可以做一些艰难的工作,把首页上的文章数划掉,然后做一些数学运算,把它放到一个循环中,然后有效地停止
注意:如果你是为了存档完整的网站而做这个剪贴,不管是为他们还是独立的,因为它在年底即将消亡,你应该对此发表评论,我对这个用例有比任何编程语言中的手工编码更好的建议。有免费的工业场地保护框架,旨在保护这些类型的濒危资源。如果您只需要文章内容,那么迭代器和自定义刮刀很可能是引入第三方依赖项的最后手段。埃文斯认为硒是唯一的解决方案,在绝大多数情况下,包括现在,硒本来是不必要的。对于那些使用可怕技术(如SharePoint)的糟糕网站来说,这是必要的,因为在没有浏览器上下文的情况下维护状态是非常痛苦的 如果我们从主页开始:
library(rvest)
pg <- read_html("https://www.healthnewsreview.org/news-release-reviews/")
我想你是想把这些内容删掉,那就去做吧
但是,还有一个讨厌的“查看更多”按钮
当您单击它时,它会发出此POST请求:
通过使用,我们可以将其转换为一个可调用的httr函数,鉴于此任务的不可能性,该函数可能不存在。我们可以使用分页参数将该函数调用包装到另一个函数中:
view_more <- function(current_offset=10) {
httr::POST(
url = "https://www.healthnewsreview.org/wp-admin/admin-ajax.php",
httr::add_headers(
`X-Requested-With` = "XMLHttpRequest"
),
body = list(
action = "viewMore",
current_offset = as.character(as.integer(current_offset)),
page_id = "22332",
btn = "btn btn-gray",
active_filter = "latest"
),
encode = "form"
) -> res
list(
links = httr::content(res) %>%
html_nodes("div.item-content") %>%
html_attr("onclick") %>%
gsub("^window.location.href='|'$", "", .),
next_offset = current_offset + 4
)
}
我们可以将新的偏移量传递给另一个调用:
y <- view_more(x$next_offset)
str(y)
## List of 2
## $ links : chr [1:4] "https://www.healthnewsreview.org/news-release-review/sweeping-claims-based-on-a-single-case-study-of-advanced-c"| __truncated__ "https://www.healthnewsreview.org/news-release-review/false-claims-of-benefit-weaken-news-release-on-experimenta"| __truncated__ "https://www.healthnewsreview.org/news-release-review/contrary-to-claims-heart-scans-dont-save-lives-but-subsequ"| __truncated__ "https://www.healthnewsreview.org/news-release-review/breastfeeding-for-stroke-prevention-kudos-to-heart-associa"| __truncated__
## $ next_offset: num 18
你可以做一些艰难的工作,把首页上的文章数划掉,然后做一些数学运算,把它放到一个循环中,然后有效地停止
注意:如果你是为了存档完整的网站而做这个剪贴,不管是为他们还是独立的,因为它在年底即将消亡,你应该对此发表评论,我对这个用例有比任何编程语言中的手工编码更好的建议。有免费的工业场地保护框架,旨在保护这些类型的濒危资源。如果您只需要文章内容,那么迭代器和自定义刮板很可能是