r - 网页抓取多页面问题

标签 r web-scraping rvest

我正在尝试使用 R 代码从以下网站抓取前 4 页用于教育目的:

https://www.boliga.dk/salg/resultater?searchTab=1&page=3&sort=date-d&zipcodeFrom=1000&zipcodeTo=2499&street=

{r}
library(rvest)
library(purrr)
library(tidyverse)

url_base <- "https://www.boliga.dk/salg/resultater?searchTab=1&page=%d&sort=date-d&zipcodeFrom=1000&zipcodeTo=2499&street="

map_df(1:4,function(i){
  page <- read_html(sprintf(url_base,i))

  data.frame(Address = html_text(html_nodes(page,".font-weight-bolder.text-left")))
}) -> Address_map
View(Address_map)

此代码的唯一问题是,它实际上并未向我显示前 4 页,而是为我提供了四次第一页。

我希望您能帮助解决这个小问题。

最佳答案

该页面使用 javascript 调用 API,您可以访问 JSON 格式的数据,就像第一页一样: jsonlite::fromJSON("https://api.boliga.dk/api/v2/sold/search/results?searchTab=1&page=1&sort=date-d&zipcodeFrom=1000&zipcodeTo=2499&street=")

要将所有 4 个页面放在一起,请尝试以下操作:

library(dplyr)
library(jsonlite)

url_base <- "https://api.boliga.dk/api/v2/sold/search/results?searchTab=1&page=%d&sort=date-d&zipcodeFrom=1000&zipcodeTo=2499&street="

Address_map <-lapply(1:4,function(i){
  print(i)
  # pause to prevent attacking the server
  Sys.sleep(2)
  #retrieve the results data frame from the returned data structure
  fromJSON(sprintf(url_base, i))$result
}) 

#bind everything together
answer <- bind_rows(Address_map)

关于r - 网页抓取多页面问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62028696/

相关文章:

r - 如何在 R 中使用 "linear predictor"包绘制列线图时重新调整 "rms"的比例?

html - rvest html 从span中抓取文本

将列表重复到 R 中的数据框

r - 警告消息 : "In cor(...): the standard deviation is zero"

python - 使用 scrapy 进行网页抓取时的字符编码问题

python - 尝试使用 selenium Python 循环搜索查询时在 find_element_by_partial_link_text() 中出错

python - 如何在 scrapy 中获取原始 start_url(在重定向之前)

r - 使用Rvest登录网站抓取403错误

R 以编程方式更改 IP 地址

r - Predict() R 函数插入符包错误 : "newdata" rows different, "type"不接受