如何用Python向Google Lens上传图片?解析请求参数及编码方法
Google Lens爬取问题解析与实现思路
1. 找不到图片上传请求的原因
- Google Lens的图片上传并非直接携带图片到搜索接口,而是先将图片上传至Google后端存储服务,返回一个资源标识(即你看到的
p参数),再用这个标识发起搜索请求。 - 上传请求属于XHR/Fetch类型的异步请求,默认可能在Network面板中被过滤,需要:
- 勾选Network面板的
Preserve log选项,避免页面跳转后请求被清空。 - 切换到
XHR/Fetch标签页查看,而非Document标签。
- 勾选Network面板的
- 部分请求可能被前端代码加密或隐藏,需要查看页面JS逻辑(比如上传相关函数)定位真实接口。
2. 关于p参数的说明
p参数不存储完整图片内容,它是图片上传后生成的唯一资源标识符(类似Google内部文件ID或哈希值),所以长度远小于图片本身的Base64编码。- 它采用Google自定义的Base64变体编码(比如替换标准Base64的
+//为-/_,并可能附加校验规则),直接用标准Base64解码会失败。
3. Python模拟图片上传并生成p参数的思路
需完整模拟浏览器的上传流程:
步骤1:准备请求头与Cookie
确保携带与浏览器一致的User-Agent、X-Client-Data、Cookie等信息(可从浏览器Network面板复制)。
步骤2:发送图片上传请求
使用requests库以multipart/form-data格式提交图片,示例代码如下:
import requests import urllib.parse cookies = { # 填入从浏览器复制的完整Cookie字段 'CONSENT': 'PENDING+XXX', 'SOCS': 'XXXXXXXXXXXXXXXXXXXXXXXXXXX', # ... 其他Cookie内容 } headers = { 'authority': 'lens.google.com', 'accept': '*/*', 'accept-language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36', # 其他必要请求头,如X-Client-Data } # 从浏览器Network面板获取真实上传接口地址 upload_url = "https://lens.google.com/upload" # 构造multipart表单 files = { 'file': ('target_image.jpg', open('target_image.jpg', 'rb'), 'image/jpeg') } # 发送上传请求 upload_response = requests.post(upload_url, cookies=cookies, headers=headers, files=files, allow_redirects=True) # 从响应中提取p参数(需根据实际响应结构调整,示例从跳转URL中解析) parsed_url = urllib.parse.urlparse(upload_response.url) p_param = urllib.parse.parse_qs(parsed_url.query).get('p')[0]
步骤3:用p参数发起搜索请求
拿到p参数后,即可构造你提供的搜索请求,获取图片分析结果。
内容的提问来源于stack exchange,提问作者kaliiiiiiiii
相关产品推荐
相关产品推荐

