python - 使用 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")
解决方案
推荐阅读
- reactjs - Ant Design Table 排序问题
- angular - 在 Angular 上设置延迟加载无法正常工作
- python - 要在表格中显示的字符串列表
- elasticsearch - 路径下的嵌套对象不是嵌套类型
- javascript - 扩展 javascript 元素是否正确?
- firebase - 为什么我的 Cloud Storage 的 URL 中的斜杠需要编码为 %2F?
- spring-boot - Spring Boot JPA save() 方法尝试插入现有行
- node.js - Electron - 如何从所有电子 pid 中获取进程 argv
- excel - 保存没有宏的工作簿
- laravel - Laravel 不能在使用 belongsToMangy 连接的表上使用 where