Python使用BeautifulSoup进行Web Scraping图片爬取相关问题咨询
问题1 爬取Pexel无输出的原因
- 第一是反爬拦截:Pexel对请求头校验比较严格,requests默认发送的
User-Agent会被识别为爬虫,大概率返回403状态码或者非页面的错误内容,你可以先打印req.status_code和req.text确认返回内容是否正常。建议自定义请求头,添加正常浏览器的UA再尝试请求。 - 第二是选择器不匹配:你当前代码里的CSS选择器
img[src^="https://images.unsplash.com/photo"]是专门针对Unsplash的图片链接前缀写的,Pexel的图片CDN域名、链接规则和Unsplash完全不同,用同一个选择器自然匹配不到任何元素,自然没有输出。
问题2 Unsplash爬取图片少且重复的解决方法
- 你拿到的图片少是因为Unsplash首屏默认只渲染15张左右的图片,其余图片是懒加载的,初始HTML里没有对应内容。重复的原因是首屏图片存在不同尺寸的占位图、缩略图共用同一份源图链接,或者懒加载的占位属性和实际src属性重复抓取。
- 解决方法分两种:
- 优先用Unsplash官方开放的API,注册开发者密钥后调用接口即可获取结构化的图片数据,支持分页拉取,没有反爬限制,也不会出现重复内容,比直接爬页面效率高很多。
- 如果要爬页面,可以使用Selenium、Playwright这类模拟浏览器的工具,模拟用户向下滚动页面触发懒加载,等新内容渲染完成后再提取链接;同时把提取到的链接存入
set结构自动去重,还要注意抓取data-src这类懒加载属性里的真实图片链接,不要只抓src属性。
问题3 动态加载内容的请求规则
普通的requests.get()发送的是静态HTTP请求,只会下载服务器返回的初始HTML文件,不会执行页面内的JavaScript代码。需要滚动才加载的内容都是JS触发动态请求拉取的,在初始HTML返回时这些内容还不存在,所以不会被一同下载到本地。
内容的提问来源于stack exchange,提问作者cariier
相关产品推荐
相关产品推荐

