网页抓取多页问题
Web scraping multiple pages issue
我正在尝试使用 R 代码从以下网站抓取前 4 页用于教育目的:
{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 页,而是向我提供了四次第一页。
我希望你能帮助解决这个小问题。
看看如果你将 sprintf(url_base,2)
的结果粘贴到浏览器会发生什么,它会在 table 1 加载网站。所以我认为你不能用 rvest 抓取这些数据,你需要一个包喜欢 RSelenium
来抓取这些数据。使用 RSelenium
您可以访问该网站,然后移动到第二个 table 等
该页面使用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 代码从以下网站抓取前 4 页用于教育目的:
{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 页,而是向我提供了四次第一页。
我希望你能帮助解决这个小问题。
看看如果你将 sprintf(url_base,2)
的结果粘贴到浏览器会发生什么,它会在 table 1 加载网站。所以我认为你不能用 rvest 抓取这些数据,你需要一个包喜欢 RSelenium
来抓取这些数据。使用 RSelenium
您可以访问该网站,然后移动到第二个 table 等
该页面使用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)