在使用 read_html() 之前向下滚动页面并加载所有项目
Scroll down a page and load all items before using read_html()
我想从一个网站上抓取 30 个项目,我能获得的最好的是 16-20 个项目。该网站需要您向下滚动才能加载更多项目。
我考虑添加不同的滚动选项,例如 key = "up_arrow")
、key = "down_arrow")
、key = "home")
和 key = "end")
以尝试激活所有项目并加载他们同时还添加了一些随机系统睡眠以使其更人性化。
我似乎也找不到使用滚动计时器“滚动”的选项,即滚动页面需要 5 秒。
如何才能正确加载整个页面才能read_html()
?
Code/Data
link = "https://www.fotocasa.es/es/comprar/viviendas/barcelona-capital/sagrada-familia/l/"
####################################################
openAndScrollPage <- function(link){
driver = rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
remDr$navigate(link)
#accept cookie
remDr$findElement(using = "xpath",'/html/body/div[1]/div[4]/div/div/div/footer/div/button[2]')$clickElement()
Sys.sleep(1)
#scroll to the end of page
webElem <- remDr$findElement("css", "html")
webElem$sendKeysToElement(list(key="end"))
#use the up_arrow to get pagination into view
WAIT <- function(x){
x <- NULL
webElem$sendKeysToElement(list(key="end"))
webElem$sendKeysToElement(list(key = "up_arrow"))
webElem$sendKeysToElement(list(key = "home"))
Sys.sleep(floor(runif(1, 5, 10)))
webElem$sendKeysToElement(list(key="end"))
}
WAIT()
Sys.sleep(1)
html_full_page = remDr$getPageSource()[[1]] %>%
read_html()
return(html_full_page)
}
####################################################
html_full_page = openAndScrollPage(link)
x <- html_full_page %>%
html_nodes('.re-CardPackPremium-carousel')
要加载整个页面,我们需要一点一点地滚动,而不是直接滚动到页面末尾。
#after navigating and accepting cookie, we shall scroll bit by bit
for(i in 1:30){
print(i)
remDr$executeScript("window.scrollBy(0,500);")
Sys.sleep(1)
}
#get nodes of all houses
html_full_page = remDr$getPageSource()[[1]] %>%
read_html()
x <- html_full_page %>%
html_nodes('.re-CardPackPremium-carousel')
{xml_nodeset (30)}
我想从一个网站上抓取 30 个项目,我能获得的最好的是 16-20 个项目。该网站需要您向下滚动才能加载更多项目。
我考虑添加不同的滚动选项,例如 key = "up_arrow")
、key = "down_arrow")
、key = "home")
和 key = "end")
以尝试激活所有项目并加载他们同时还添加了一些随机系统睡眠以使其更人性化。
我似乎也找不到使用滚动计时器“滚动”的选项,即滚动页面需要 5 秒。
如何才能正确加载整个页面才能read_html()
?
Code/Data
link = "https://www.fotocasa.es/es/comprar/viviendas/barcelona-capital/sagrada-familia/l/"
####################################################
openAndScrollPage <- function(link){
driver = rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
remDr$navigate(link)
#accept cookie
remDr$findElement(using = "xpath",'/html/body/div[1]/div[4]/div/div/div/footer/div/button[2]')$clickElement()
Sys.sleep(1)
#scroll to the end of page
webElem <- remDr$findElement("css", "html")
webElem$sendKeysToElement(list(key="end"))
#use the up_arrow to get pagination into view
WAIT <- function(x){
x <- NULL
webElem$sendKeysToElement(list(key="end"))
webElem$sendKeysToElement(list(key = "up_arrow"))
webElem$sendKeysToElement(list(key = "home"))
Sys.sleep(floor(runif(1, 5, 10)))
webElem$sendKeysToElement(list(key="end"))
}
WAIT()
Sys.sleep(1)
html_full_page = remDr$getPageSource()[[1]] %>%
read_html()
return(html_full_page)
}
####################################################
html_full_page = openAndScrollPage(link)
x <- html_full_page %>%
html_nodes('.re-CardPackPremium-carousel')
要加载整个页面,我们需要一点一点地滚动,而不是直接滚动到页面末尾。
#after navigating and accepting cookie, we shall scroll bit by bit
for(i in 1:30){
print(i)
remDr$executeScript("window.scrollBy(0,500);")
Sys.sleep(1)
}
#get nodes of all houses
html_full_page = remDr$getPageSource()[[1]] %>%
read_html()
x <- html_full_page %>%
html_nodes('.re-CardPackPremium-carousel')
{xml_nodeset (30)}