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

使用Beautiful Soup爬取Google图片遇异常,请求技术排查指导

问题描述

尝试用Beautiful Soup爬取Google图片搜索中「车内人物」相关内容时,通过URL获取的数据中大部分标记被隐藏/未显示,但浏览器中检查该URL能看到完整内容。注释请求头后内容缺失,使用请求头则返回异常结果(截图显示奇怪内容)。已确认非JS导致内容丢失(浏览器禁用JS后仍可见全部内容),还发现URL返回的信息和页面中检查的div数量相关,检查的div越多,获取的信息越多,求解决方法。

相关代码:

from bs4 import BeautifulSoup
import numpy as np
import requests

url="https://www.google.com/search?site=&tbm=isch&source=hp&biw=1873&bih=990&"
# u_agent={
#     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
#     # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#     # 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
#     # 'Accept-Encoding': 'none',
#     # 'Accept-Language': 'en-US,en;q=0.8',
#     # 'Connection': 'keep-alive'
# }
page=requests.get(url + 'q='+'person-inside-car')
soup=BeautifulSoup(page.text, 'html.parser')
print(soup)
解决思路与方案

1. 修正请求头配置

Google有反爬机制,会识别非浏览器请求,之前的请求头参数不全(比如注释了Accept等字段)或设置错误(比如Accept-Encoding: none会导致编码异常),需要使用完整且正确的浏览器请求头:

from bs4 import BeautifulSoup
import requests

# 模拟Chrome浏览器的完整请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Referer': 'https://www.google.com/',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

search_query = 'person-inside-car'
# 简化并规范URL拼接
url = f"https://www.google.com/search?tbm=isch&q={search_query}"

page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')

2. 正确提取图片链接

Google图片的缩略图链接通常存储在img标签的data-src属性中(src多为占位图),提取方式如下:

# 定位图片元素,class可能随Google更新变化,需自行核对
image_tags = soup.find_all('img', class_='rg_i Q4LuWd')
for img_tag in image_tags:
    # 优先取data-src,没有则取src
    img_url = img_tag.get('data-src') or img_tag.get('src')
    if img_url:
        print(img_url)

3. 处理滚动加载的多结果问题

你提到的「检查div越多获取信息越多」,本质是Google图片采用滚动加载机制,初始请求仅返回部分结果。想要获取更多内容,有两种方式:

  • 分页参数请求:在URL中添加&start=N参数(N为结果起始索引,每次递增20,比如&start=20、&start=40),循环请求多页结果。
  • 模拟浏览器滚动:使用Selenium模拟浏览器滚动行为,触发动态加载,再解析页面内容(适合需要大量结果的场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:02:02