使用 Selenium 抓取延迟加载网站

时间:2020-12-29 16:52:46

标签: python selenium web web-scraping beautifulsoup

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

通常,我抓取任何动态网站的方法是向下滚动,直到我有足够的数据可以抓取,然后将 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")

0 个答案:

没有答案
相关问题