如何用Selenium滚动Flickr页面获取全部图片链接?
滚动Flickr页面获取全部图片链接的解决方案
Flickr群组页面采用懒加载机制,只有滚动到页面底部时才会加载更多图片。你的代码仅获取了首屏加载的内容,因此需要模拟滚动操作触发全部图片加载后再解析页面。
以下是修改后的代码,核心逻辑是循环滚动页面,直到没有新内容加载为止:
from bs4 import BeautifulSoup from selenium import webdriver import time op = webdriver.ChromeOptions() op.add_argument('headless') # 无头模式下设置窗口大小,避免页面布局异常导致加载失败 op.add_argument('window-size=1920x1080') driver = webdriver.Chrome(options=op) url = "https://www.flickr.com/groups/allfreepictures/pool/page3041" driver.get(url) # 模拟滚动到底部加载全部内容 last_page_height = driver.execute_script("return document.body.scrollHeight") while True: # 执行滚动脚本,滚到当前页面最底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 等待新内容加载,时间可根据网络速度调整 time.sleep(2) # 获取滚动后的页面高度 current_page_height = driver.execute_script("return document.body.scrollHeight") # 如果高度不再变化,说明已加载完所有内容 if current_page_height == last_page_height: break last_page_height = current_page_height # 解析完整加载后的页面 soup = BeautifulSoup(driver.page_source, 'html.parser') image_urls = [link['href'] for link in soup.findAll("a", {"class": "overlay"})] print(f"共获取到 {len(image_urls)} 个图片链接") print(image_urls) driver.quit()
关键细节说明:
- 滚动判断逻辑:通过对比滚动前后的页面高度,确认是否还有新内容需要加载,高度不再变化时终止循环。
- 无头模式优化:添加
window-size参数,避免无头浏览器因窗口尺寸过小导致页面元素加载异常。 - 加载等待:使用
time.sleep简单等待新内容加载,若网络不稳定,可替换为WebDriverWait等待新的图片元素出现,提升可靠性。
内容的提问来源于stack exchange,提问作者Explorer
相关产品推荐
相关产品推荐

