使用 rvest 和 R 进行网络抓取 html
Web scraping html with rvest and R
我想抓取此网站 https://www.askramar.com/Ponuda。首先,我应该抓取所有指向每个汽车页面的链接。 html 结构中的扩展链接如下所示:
我尝试了以下代码,但在 R 中得到了一个空对象:
url <- "https://www.askramar.com/Ponuda"
html_document <- read_html(url)
links <- html_document %>%
html_nodes(xpath = '//*[contains(concat(" ", @class, " "), concat(" ", "vozilo", " "))]') %>%
html_attr(name = "href")
网页上是javascript吗?请帮忙!谢谢!
是的,该页面使用 javascript 加载您感兴趣的内容。但是,它只是通过向 https://www.askramar.com/Ajax/GetResults.cshtml
调用 xhr GET 请求来完成此操作。你也可以这样做:
url <- "https://www.askramar.com/Ajax/GetResults.cshtml?stranica="
links <- list()
for(i in 1:45)
{
links[[i]] <- httr::GET(paste0(url, i - 1)) %>% read_html %>%
html_nodes(xpath = '//a[contains(@href, "Vozilo")]') %>%
html_attr(name = "href")
}
links <- do.call("c", links)
print(links)
# [1] "Vozilo?id=17117" "Vozilo?id=17414" "Vozilo?id=17877" "Vozilo?id=17834"
# [5] "Vozilo?id=17999" "Vozilo?id=18395" "Vozilo?id=17878" "Vozilo?id=16256"
# [9] "Vozilo?id=17465" "Vozilo?id=17560" "Vozilo?id=17912" "Vozilo?id=18150"
#[13] "Vozilo?id=18131" "Vozilo?id=17397" "Vozilo?id=18222" "Vozilo?id=17908"
#[17] "Vozilo?id=18333" "Vozilo?id=17270" "Vozilo?id=18105" "Vozilo?id=16803"
#[21] "Vozilo?id=16804" "Vozilo?id=17278" "Vozilo?id=17887" "Vozilo?id=17939"
# ...plus 1037 further elements
如果您检查页面上的网络,您会看到它发送带有许多查询参数的 GET 请求,最重要的是 'stranice'。使用以上信息,我做了以下操作:
library(rvest)
stranice <- 1:3
askramar_scrap <- function(stranica) {
url <- paste0("https://www.askramar.com/Ajax/GetResults.cshtml?stanje=&filter=&lokacija=&",
"pojam=&marka=&model=&godinaOd=&godinaDo=&cijenaOd=&cijenaDo=&snagaOd=&snagaDo=&",
"karoserija=&mjenjac=&boja=&pogon4x4=&sifra=&stranica=", stranica, "&sort=")
html_document <- read_html(url)
links <- html_document %>%
html_nodes(xpath = '//a[contains(@href, "Vozilo")]') %>%
html_attr(name = "href")
}
links <- lapply(stranice, askramar_scrap)
links <- unlist(links)
links <- unique(links)
希望这就是您所需要的。
我想抓取此网站 https://www.askramar.com/Ponuda。首先,我应该抓取所有指向每个汽车页面的链接。 html 结构中的扩展链接如下所示:
我尝试了以下代码,但在 R 中得到了一个空对象:
url <- "https://www.askramar.com/Ponuda"
html_document <- read_html(url)
links <- html_document %>%
html_nodes(xpath = '//*[contains(concat(" ", @class, " "), concat(" ", "vozilo", " "))]') %>%
html_attr(name = "href")
网页上是javascript吗?请帮忙!谢谢!
是的,该页面使用 javascript 加载您感兴趣的内容。但是,它只是通过向 https://www.askramar.com/Ajax/GetResults.cshtml
调用 xhr GET 请求来完成此操作。你也可以这样做:
url <- "https://www.askramar.com/Ajax/GetResults.cshtml?stranica="
links <- list()
for(i in 1:45)
{
links[[i]] <- httr::GET(paste0(url, i - 1)) %>% read_html %>%
html_nodes(xpath = '//a[contains(@href, "Vozilo")]') %>%
html_attr(name = "href")
}
links <- do.call("c", links)
print(links)
# [1] "Vozilo?id=17117" "Vozilo?id=17414" "Vozilo?id=17877" "Vozilo?id=17834"
# [5] "Vozilo?id=17999" "Vozilo?id=18395" "Vozilo?id=17878" "Vozilo?id=16256"
# [9] "Vozilo?id=17465" "Vozilo?id=17560" "Vozilo?id=17912" "Vozilo?id=18150"
#[13] "Vozilo?id=18131" "Vozilo?id=17397" "Vozilo?id=18222" "Vozilo?id=17908"
#[17] "Vozilo?id=18333" "Vozilo?id=17270" "Vozilo?id=18105" "Vozilo?id=16803"
#[21] "Vozilo?id=16804" "Vozilo?id=17278" "Vozilo?id=17887" "Vozilo?id=17939"
# ...plus 1037 further elements
如果您检查页面上的网络,您会看到它发送带有许多查询参数的 GET 请求,最重要的是 'stranice'。使用以上信息,我做了以下操作:
library(rvest)
stranice <- 1:3
askramar_scrap <- function(stranica) {
url <- paste0("https://www.askramar.com/Ajax/GetResults.cshtml?stanje=&filter=&lokacija=&",
"pojam=&marka=&model=&godinaOd=&godinaDo=&cijenaOd=&cijenaDo=&snagaOd=&snagaDo=&",
"karoserija=&mjenjac=&boja=&pogon4x4=&sifra=&stranica=", stranica, "&sort=")
html_document <- read_html(url)
links <- html_document %>%
html_nodes(xpath = '//a[contains(@href, "Vozilo")]') %>%
html_attr(name = "href")
}
links <- lapply(stranice, askramar_scrap)
links <- unlist(links)
links <- unique(links)
希望这就是您所需要的。