Python使用BeautifulSoup.find_all无法获取网页全部图片问题求解
问题原因
- 核心原因就是你猜测的页面未加载全部内容:Unsplash采用无限滚动的动态加载机制,首次请求返回的静态HTML仅包含首屏6~10张图片的内容,剩余图片需要页面滚动到接近底部时,浏览器才会异步请求更多数据渲染到页面。
requests库仅能获取首次请求返回的静态HTML,无法触发动态加载逻辑,因此只能拿到少量图片。 - 你使用的元素类名
_2UpQX是Unsplash前端框架自动生成的动态类名,这类类名会随网站版本迭代频繁变动,稳定性极低,很容易出现爬取失效的情况。 - 代码本身存在语法错误:
print(len(images)缺少右括号,实际运行会直接抛出语法错误,需要修改为print(len(images))。
可行解决思路
- 使用Selenium、Playwright等无头浏览器工具,模拟用户滚动页面的操作,触发动态加载逻辑,等待所需内容全部渲染完成后再提取图片链接。
- 直接抓取Unsplash的异步数据接口:在浏览器控制台的网络面板中筛选滚动页面时触发的图片资源请求,直接构造对应请求调用接口获取数据,该方式的效率远高于模拟浏览器操作。
- 爬取过程中注意控制请求频率,避免触发网站反爬机制导致IP被限制。
内容的提问来源于stack exchange,提问作者Itay Tsuk
相关产品推荐
相关产品推荐

