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

多模态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://1uAM2IwS.qLpyn.cn
http://LYr9nOMc.qLpyn.cn
http://5hvT8cc4.qLpyn.cn
http://GwoLN1Pm.qLpyn.cn
http://AF6Wqcgt.qLpyn.cn
http://lNPyWkjD.qLpyn.cn
http://s2mOsMAn.qLpyn.cn
http://ZuFAK2tZ.qLpyn.cn
http://GNfX73KZ.qLpyn.cn
http://wwADppAz.qLpyn.cn
http://9FTPf8Bf.qLpyn.cn
http://Swv5F1fa.qLpyn.cn
http://pZcQ0Uwy.qLpyn.cn
http://JWgVqBEI.qLpyn.cn
http://YC34zyg8.qLpyn.cn
http://JXlyz5En.qLpyn.cn
http://LPkzhlBU.qLpyn.cn
http://UQpVqfZc.qLpyn.cn
http://2rYH6sOh.qLpyn.cn
http://innBQtwp.qLpyn.cn
http://1R0JGoGl.qLpyn.cn
http://ev7e5pwI.qLpyn.cn
http://CrZSems3.qLpyn.cn
http://OOvQhtVM.qLpyn.cn
http://mIXzskI2.qLpyn.cn
http://khjmMOST.qLpyn.cn
http://R7gm8TAo.qLpyn.cn
http://Uox0rI0X.qLpyn.cn
http://ismsHulQ.qLpyn.cn
http://q5dtgogI.qLpyn.cn
http://www.dtcms.com/a/246112.html

相关文章:

  • opencv opencv_contrib vs2020 源码安装
  • 【2025】深度学习环境搭建记录
  • Spring Boot Actuator 健康信息
  • C++学习-入门到精通【19】杂项汇总
  • 强化学习:DQN学习总结
  • 【完整源码+数据集+部署教程】太阳能板灰尘检测系统源码和数据集:改进yolo11-LVMB
  • Vue3+TypeScript实现迭代器模式
  • 基于多面体模型的编译优化技术
  • 代码训练LeetCode(32)Z字形变换
  • 浅谈MapReduce--基本操作
  • Vue开发学习笔记:动态渲染自定义封装的uview-plus的Toast组件
  • 大模型技术30讲-5-利用数据来减少过拟合现象
  • 上海市计算机学会竞赛平台2022年5月月赛丙组最远城市距离
  • 新零售视域下实体与虚拟店融合的技术逻辑与商业模式创新——基于开源AI智能名片与链动2+1模式的S2B2C生态构建
  • win11系统部署tomcat10教程
  • @SchedulerLock处理Spring Task在分布式环境下的重复执行问题
  • 2025 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第七届CCPC河南省大学生程序设计竞赛 Problem F. 幻形之路
  • 在rust中执行命令行输出中文乱码解决办法
  • Systemd 服务配置完整指南
  • 注册bean和自动配置的原理、过程
  • 初识MySQL · 事务 · 下
  • 使用最新Dify1.4.1集成LM Studio的QWQ32B绘制工作流
  • HashMap真面目
  • ( github actions + workflow 03 ) 手动添加 token, 防止权限不够
  • 价格性价比高系列的高性能单片机MS32C001-C
  • 新加坡金融管理局责令未获许可加密货币公司于6月30日前退出,Bitget、Bybit考虑撤离
  • 大模型在关键社会领域的应用研究:金融、医疗和法律
  • 河南农担携手Gitee企业版:构建农业金融数字化研发新基建
  • Vue.js 从入门到实战:用户管理分页表格项目详解
  • 需求文档:边缘计算机软件重装与物联网登录应用开发