You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup获取Google Shopping商品图片src遇到问题

解决Google Shopping爬取图片返回占位GIF的问题

你遇到的是懒加载机制导致的问题——Google Shopping初始加载时会给img标签的src设置占位GIF,真实图片地址实际存放在data-src属性里,而非src。

方法一:直接提取懒加载属性

修改代码中获取图片链接的部分,把src替换为data-src即可,同时保留src作为 fallback 避免异常:

import requests
from bs4 import BeautifulSoup as bs
from rich import print


def gg_shopping(query):
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.79 Safari/537.36'}
    s = requests.Session()
    s.headers.update(headers)
    big_list = []
    search = query.replace(' ', '+')
    r = s.get(f'https://www.google.com/search?q={search}&tbm=shop')
    soup = bs(r.text, 'lxml')
    all_prods = soup.find_all('div', 'sh-dgr__gr-auto')
    for prod in all_prods:
        link = "https://www.google.com" + str(prod.find('a').get('href'))
        # 优先取data-src,不存在则用原src
        img = prod.find('img').get('data-src', prod.find('img').get('src'))
        print(img)

def main():
    gg_shopping("may tinh")

if __name__ == "__main__":
    main()

方法二:从页面内嵌JSON提取(更稳定)

Google会把商品的完整结构化数据放在页面的script标签中,解析这些JSON能拿到更准确的图片、价格等信息,还能避免HTML结构变动带来的失效问题:

import requests
import json
from bs4 import BeautifulSoup as bs
from rich import print


def gg_shopping(query):
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.79 Safari/537.36'}
    s = requests.Session()
    s.headers.update(headers)
    search = query.replace(' ', '+')
    r = s.get(f'https://www.google.com/search?q={search}&tbm=shop')
    soup = bs(r.text, 'lxml')
    
    # 遍历script标签,找到包含商品数据的内容
    for script in soup.find_all('script'):
        script_content = script.string
        if script_content and 'shoppingData' in script_content:
            # 截取JSON格式的部分(需根据实际返回内容调整截取逻辑)
            start_idx = script_content.find('{')
            end_idx = script_content.rfind('}') + 1
            try:
                shopping_data = json.loads(script_content[start_idx:end_idx])
                # 从JSON中提取图片链接(路径需根据实际结构调整)
                for item in shopping_data.get('items', []):
                    img_url = item.get('image', {}).get('src')
                    if img_url:
                        print(img_url)
            except json.JSONDecodeError:
                continue
    return

def main():
    gg_shopping("may tinh")

if __name__ == "__main__":
    main()

注意:Google的页面结构和内嵌JSON格式可能随时调整,第二种方法需要你根据实际返回的HTML内容,微调JSON的提取路径。

内容的提问来源于stack exchange,提问作者Dung8466

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:28:32