首页 > 解决方案 > 使用 Selenium 抓取延迟加载网站

问题描述

我正在尝试在Goibibo.com上构建一个简单的 Web Scraping Project,并尝试专门在页面上工作。

一般来说,我抓取任何动态网站的方法是向下滚动,直到有足够的数据可以抓取,然后将 HTML 加载到 BeautifulSoup 中进行抓取。但是在这种情况下,网站使用了某种延迟加载,它只加载用户可见的元素并以 HTML 呈现,而用户滚动过去的元素则被删除。因此,如果我尝试解析 HTML 数据,我会在汤中找到大约 6-10 家酒店。

我想找到一种方法来提取此页面上的所有酒店。我最初想滚动到div每个帖子,但我不确定如何实现。

这是我到目前为止所做的

chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = "chromedriver.exe"

driver = webdriver.Chrome()
link = "https://www.goibibo.com/hotels/hotels-in-delhi-ct/"
driver.get(link)
driver.maximize_window()
sleep(2)

driver.execute_script("window.scrollTo(0, document.body.scrollHeight*(0.75))") #75% as the footer is tall
sleep(2)

showMore = driver.find_elements_by_xpath("//*[@id='root']/div[2]/div/section[2]/button") #Clicking the show more button
driver.execute_script("window.scrollTo(0, document.body.scrollHeight*(0.75))")
showMore[0].click()

for _ in range(10):

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    sleep(1)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight-2000)") 
    # Hacky way to load more listings as the loading was stuck for some reason until I scrolled again
    sleep(2)

html = driver.page_source
soup = BeautifulSoup(html, "html.parser")

标签: pythonseleniumwebweb-scrapingbeautifulsoup

解决方案


推荐阅读