使用BeautifulSoup提取a标签内img的src仅获按钮资源该如何解决
问题原因
- 网站采用懒加载机制优化加载速度,非首屏的卡牌图片真实地址不会直接存在
src属性中,而是存放在data-src等自定义属性中,仅当页面滚动到对应区域时才会通过JS把地址赋值给src,你当前仅读取src属性只能拿到已经完成加载的少量图片。 - 若你使用requests等静态请求工具获取页面源码,部分动态渲染的卡牌节点可能未被加载到解析用的soup对象中,也会导致提取结果不全。
修复方案
步骤1:调整属性读取逻辑,兼容懒加载场景
修改代码同时读取常见的懒加载属性,同时补全相对路径为完整可访问的URL:
for a in soupimages.find_all('a'): if a.img: img_url = None # 按优先级读取图片地址 if a.img.has_attr('src'): img_url = a.img['src'] elif a.img.has_attr('data-src'): img_url = a.img['data-src'] elif a.img.has_attr('data-original'): img_url = a.img['data-original'] # 补全相对路径 if img_url and not img_url.startswith('http'): img_url = 'https://www.pokellector.com' + img_url if img_url: print(img_url)
步骤2:确认页面源码完整性
如果调整后还是拿不到全部图片,说明静态请求无法获取完整的动态渲染节点,换用Selenium、Playwright等支持JS渲染的工具,模拟浏览器打开页面等待所有节点加载完成后,再提取页面源码做解析即可。
内容的提问来源于stack exchange,提问作者Bous
相关产品推荐
相关产品推荐

