使用Beautiful Soup爬取Steam首页封面返回trans.gif空文件问题排查
问题根因
Steam 商店页面使用了图片懒加载机制,游戏封面的真实地址不会直接放在img标签的src属性中,初始加载阶段src统一填充的是 1x1 尺寸的透明占位图trans.gif,真实的封面链接存储在img标签的自定义属性(通常为data-src,部分区域版本页面可能为data-srcset)中。
另外你的代码还有两处隐性问题:
page_soup.findAll返回的是列表,直接用append会把整个查询结果列表作为单个元素插入container,后续遍历到该元素时会触发属性读取报错,应该改用extend方法合并列表- 遍历
container时无需单独维护count索引,直接遍历拿到的item对象即可,避免索引错位导致的取值错误
代码修改方案
- 先输出
cover.img的所有属性,确认你爬取的页面版本中存储真实封面地址的属性名:
print(cover.img.attrs)
- 把原代码中读取
src的逻辑替换为读取对应自定义属性,同时修正上述隐性问题。
修正后的参考代码
page_soup = soup(page_html, 'html.parser') container = page_soup.findAll('a', {'class':'tab_item'}) # 把append改为extend合并列表 container.extend(page_soup.findAll('a', {'class':'tab_item.app_impression_tracked'})) for item in container: price = item.find('div','tab_item_discount') title = item.find('div','tab_item_content') cover = item.find('div', 'tab_item_cap') tags = title.find('div', 'tab_item_top_tags') print("price: " + price['data-price-final']) print("Title: " + title.div.text) # 替换为真实存储封面地址的属性,这里以常见的data-src为例,加fallback逻辑避免属性不存在报错 print("Cover: " + cover.img.get('data-src', cover.img['src'])) print("Tags: " + tags.text)
内容的提问来源于stack exchange,提问作者Maria Shanahan
相关产品推荐
相关产品推荐

