我正在尝试在 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")