当前位置: 首页 > web >正文

多模态AI爬虫:文本+图像智能抓取实战

爬虫代理

一个AI模型训练任务引发的爬虫危机

上个月,公司AI组向我们数据组提出一个“看似简单”的需求:训练一个能识别商品种类的多模态模型,数据来源不限,但要求包含图像 + 商品文本 + 价格 + 折扣信息。初看似乎没问题,直到他们指明:

“先抓一批亚马逊上关键词为‘laptop’的商品吧,图片和描述要配套的,价格、库存、折扣最好也能标注。”

我心里一沉——亚马逊,图文混合,反爬一流,这可不是普通爬虫能搞定的活。


你以为的请求头伪装,根本不够

第一轮尝试,我们写了个基础版脚本,配了user-agent,伪装了headers,访问频率也控制得不错。

然而爬了几分钟后,页面直接跳转验证码,甚至被302重定向回首页。我们意识到:

  • IP频率检测非常敏感
  • navigator.webdriver** 检测等自动化识别也在阻挡**
  • 图片链接多为懒加载或动态构造

于是我们准备全面升级:使用代理IP + 用户模拟持久化 + 多模态解析的组合拳。


多模态AI爬虫的架构搭建与实战代码

我们拆解了需求,决定使用 requests + lxml + Pillow,结合爬虫代理IP服务,实现一个具备图像和文本提取能力的智能爬虫。

核心技术点:

  • 代理IP绕过限制(爬虫代理接入)
  • 模拟用户防反爬识别
  • 图片下载与保存
  • 结构化存储:根据关键词分目录保存JSON和图片

代码实现如下(关键词以 laptop 为例):

import requests
from lxml import html
import os
import json
from urllib.parse import quote
from PIL import Image
from io import BytesIO# 设置关键词
keyword = "laptop"
search_url = f"https://www.amazon.com/s?k={quote(keyword)}"# 设置爬虫代理(参考亿牛云爬虫加强版示例 www.16yun.cn)
proxies = {"http": "http://用户名:密码@代理域名:端口","https": "http://用户名:密码@代理域名:端口"
}# 自定义请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36","Accept-Language": "en-US,en;q=0.9","Cookie": "你的cookie字符串"  # 可通过浏览器调试获取登录后的cookie
}# 创建数据保存目录
os.makedirs(f"data/{keyword}/images", exist_ok=True)# 发送请求获取页面
response = requests.get(search_url, headers=headers, proxies=proxies, timeout=15)
tree = html.fromstring(response.content)# 解析商品列表(取前10个)
products = tree.xpath('//div[contains(@class,"s-result-item") and @data-asin]')
results = []for idx, product in enumerate(products[:10]):try:asin = product.get("data-asin")title = product.xpath('.//h2//span/text()')price_whole = product.xpath('.//span[@class="a-price-whole"]/text()')price_frac = product.xpath('.//span[@class="a-price-fraction"]/text()')img_url = product.xpath('.//img[@class="s-image"]/@src')# 构造完整价格price = f"{price_whole[0]}.{price_frac[0]}" if price_whole and price_frac else "N/A"# 构造商品描述title = title[0].strip() if title else "N/A"# 图片下载与保存if img_url:img_response = requests.get(img_url[0], headers=headers, proxies=proxies)img = Image.open(BytesIO(img_response.content))img_path = f"data/{keyword}/images/{asin}.jpg"img.save(img_path)else:img_path = "N/A"# 构造数据结构item = {"asin": asin,"title": title,"price": price,"image_path": img_path,"keyword": keyword}results.append(item)except Exception as e:print(f"商品索引 {idx} 解析失败:{e}")continue# 保存为JSON
with open(f"data/{keyword}/products.json", "w", encoding="utf-8") as f:json.dump(results, f, indent=2, ensure_ascii=False)print(f"关键词 [{keyword}] 商品信息采集完成,共采集到 {len(results)} 条。")

多模态爬虫不只是“图+文”的堆砌

这次任务结束后,我们做了复盘。爬虫不仅是“爬”,而是感知 + 策略 + 多模态融合的过程:

  1. 图像获取并不是保存URL,而是要稳定下载并落地保存,才能用于模型训练。
  2. 代理+用户模拟组合远胜单一伪装,尤其在亚马逊这种反爬成熟站点上。
  3. 信息归类存储为后续数据训练节省了大量准备时间。

这次经历也启发我们后续开发了一套自动化“关键词 → 多模态样本”生成工具,真正走上了AI时代下数据爬虫的新台阶。

http://www.xdnf.cn/news/13894.html

相关文章:

  • 【cv学习笔记】YOLO系列笔记
  • FFmpeg是什么?
  • 怎么轻松实现报表跨库移植
  • 循环数组中相邻元素的最大差值
  • DEVICENET转MODBUS TCP网关连接ABB机器人配置案例
  • 【android bluetooth 框架分析 04】【bt-framework 层详解 5】【AbstractionLayer介绍】
  • JAVA:深入理解 wait() 和 sleep() 的区别与实战
  • 78Qt窗口_QStatusBar的基本使用
  • centos6.5 老旧系统编译glib-2.58.3.tar.bz2
  • mesh转solid freecad
  • OpenCV——图像基本操作(三)
  • 【开发常用命令】:docker常用命令
  • preload、preconnect、prefetch 的作用
  • day033-备份服务rsync
  • Pytorch中view函数详解和工程实战示例
  • docker compose的变量使用说明
  • 【完整源码+数据集+部署教程】太阳能板灰尘检测系统源码和数据集:改进yolo11-LVMB
  • 京津冀城市群13城市空间权重0-1矩阵
  • Rosetta 2介绍
  • 第三章支线七 ·路由边境 · 多页世界的穿梭之术
  • 【MicronTech】eMMC 部件编号解析
  • flutter 的lottie执行一次动画后关闭
  • Windows美化终端、安装wsl和docker
  • Python Day49
  • 一阶/二阶Nomoto模型(野本模型)为何“看不到”船速对回转角速度/角加速度的影响?
  • 智慧管廊数字化运维管理平台
  • 规则引擎rule-engine v1.0实现解释(一)-规则,执行,容器
  • Vue3中组件Ref打印Proxy(Object)与defineExpose的深度解析
  • navicat 有免费版了,navicat 官方免费版下载
  • vue2项目开发中遇到的小问题