Python 爬虫高级应用:结合 AI 自动提取爬取内容的关键信息
摘要:2026年第二届人工智能与产品设计国际学术会议(AIPD2026)将探讨AI技术与爬虫结合的应用。文章提出AI技术(NLP、CV、多模态学习)可解决传统爬虫在非结构化数据处理中的局限,实现从数据采集到价值挖掘的升级。通过三大实战场景(新闻文本解析、商品图片识别、社交媒体图文提取),展示了BERT、YOLO、CLIP等模型在关键信息提取中的应用,并提供了完整代码实现。最后总结了AI爬虫的优化策
2026年第二届人工智能与产品设计国际学术会议 (AIPD 2026)

时间:2026年02月06-08日
地点:中国-北京


前言
随着网络爬虫技术的普及,爬取海量文本、图片、结构化数据已成为常规操作,但如何从杂乱无章的爬取内容中高效提取有价值的关键信息,是爬虫应用从 “数据采集” 向 “价值挖掘” 升级的核心难题。传统的正则表达式、字符串匹配等方式仅能处理固定格式的内容,面对非结构化文本(如商品评论、新闻资讯、社交媒体帖子)时,适配性差、维护成本高。而人工智能(AI)技术的发展为这一问题提供了终极解决方案 —— 通过自然语言处理(NLP)、计算机视觉(CV)等 AI 技术,可自动识别、提取、分类爬取内容的关键信息,实现从 “数据爬取” 到 “信息理解” 的跨越。本文聚焦 Python 爬虫与 AI 的结合应用,从文本关键信息提取、图像内容识别、多模态数据解析三个维度,结合实战代码、输出结果及原理说明,系统讲解 AI 驱动的爬虫内容解析方案,助力开发者实现爬取数据的智能化处理。
摘要
本文围绕 Python 爬虫的高级应用场景,深度讲解如何结合 AI 技术自动提取爬取内容的关键信息。核心涵盖三大方向:基于预训练 NLP 模型(BERT、ChatGLM、Llama)提取非结构化文本的实体、关键词、情感倾向;基于深度学习模型(YOLO、ResNet)识别爬取图片中的目标物体与关键特征;基于多模态模型(CLIP)解析图文混合的爬取内容。所有案例均基于真实爬取场景:新闻资讯文本解析、电商商品图片识别、社交媒体图文内容提取,并提供新闻资讯爬取实战页面、电商商品图片爬取接口作为实战数据源参考。本文配套完整可运行代码、输出结果及原理解析,代码可直接适配 CSDN Markdown 编辑器排版,帮助开发者掌握 AI 与爬虫结合的核心技术体系。
一、AI 赋能爬虫内容提取的核心技术体系
1.1 核心技术分类与应用场景
| AI 技术方向 | 核心能力 | 爬虫应用场景 | 典型模型 / 工具 |
|---|---|---|---|
| 自然语言处理(NLP) | 文本实体提取、关键词抽取、情感分析、摘要生成 | 新闻资讯解析、评论分析、商品描述提取 | BERT、ChatGLM-6B、jieba+TF-IDF、spaCy |
| 计算机视觉(CV) | 图像目标检测、特征识别、文字识别(OCR) | 商品图片解析、验证码识别、广告图内容提取 | YOLOv8、ResNet50、EasyOCR、PaddleOCR |
| 多模态学习 | 图文关联分析、跨模态信息提取 | 社交媒体图文帖子、电商商品图文详情 | CLIP、BLIP、MiniGPT-4 |
| 大语言模型(LLM) | 复杂内容理解、结构化输出、智能问答 | 非结构化文本解析、爬取内容总结、规则生成 | ChatGPT API、文心一言 API、通义千问 API |
1.2 技术优势对比(AI vs 传统方法)
| 对比维度 | 传统方法(正则 / 字符串匹配) | AI 方法(NLP/CV/LLM) |
|---|---|---|
| 适配性 | 仅支持固定格式内容,需手动编写规则 | 自适应非结构化内容,无需预设规则 |
| 准确率 | 易受格式变化影响,准确率低(70%-80%) | 泛化能力强,准确率高(90%+) |
| 维护成本 | 内容格式变化需重新编写规则,维护成本高 | 模型微调即可适配新场景,维护成本低 |
| 处理能力 | 仅能提取表层信息(如手机号、价格) | 可提取深层语义信息(如情感、意图、关联关系) |
| 多语言支持 | 需单独编写多语言规则,适配性差 | 预训练模型原生支持多语言,无需额外开发 |
1.3 环境准备(核心依赖安装)
bash
运行
# 基础NLP依赖
pip install transformers torch pandas numpy jieba scikit-learn spaCy
# 中文NLP模型支持
python -m spacy download zh_core_web_sm
# 计算机视觉依赖
pip install ultralytics opencv-python pillow easyocr paddlepaddle paddleocr
# 大语言模型依赖(本地部署)
pip install modelscope sentence-transformers
# 大语言模型API依赖(云端调用)
pip install openai dashscope # dashscope为通义千问API依赖
二、实战场景 1:基于 NLP 预训练模型提取文本关键信息
2.1 场景说明
爬取网易新闻的科技类新闻文本,字段包括:新闻标题、正文内容、发布时间,需自动提取以下关键信息:
- 文本实体(人物、机构、地点);
- 核心关键词(Top10);
- 新闻摘要(50 字以内);
- 情感倾向(正面 / 中性 / 负面)。
2.2 步骤 1:爬取新闻文本数据
python
运行
import requests
import re
import pandas as pd
from lxml import etree
def crawl_163_news():
"""爬取网易新闻科技类文本数据"""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Referer": "https://news.163.com/"
}
# 网易科技新闻列表页
list_url = "https://news.163.com/tech/"
response = requests.get(list_url, headers=headers)
response.encoding = "utf-8"
html = etree.HTML(response.text)
# 提取前5条新闻链接
news_links = html.xpath('//div[@class="data_row news_article clearfix "]/div[@class="col_main"]/h3/a/@href')[:5]
news_data = []
for link in news_links:
try:
# 爬取单篇新闻详情
news_response = requests.get(link, headers=headers)
news_response.encoding = "utf-8"
news_html = etree.HTML(news_response.text)
# 提取标题
title = news_html.xpath('//h1[@class="post_title"]/text()')
title = title[0].strip() if title else ""
# 提取正文(清洗广告、无关标签)
content_paragraphs = news_html.xpath('//div[@class="post_body"]/p/text()')
content = " ".join([p.strip() for p in content_paragraphs if p.strip() and not p.startswith("【")])
# 清洗特殊字符
content = re.sub(r"[^\u4e00-\u9fa5a-zA-Z0-9,。!?;:、]", " ", content)
if title and content:
news_data.append({
"title": title,
"content": content[:1000], # 截取前1000字
"url": link
})
except Exception as e:
print(f"爬取新闻失败:{e}")
continue
# 转换为DataFrame
df = pd.DataFrame(news_data)
df.to_csv("163_tech_news.csv", index=False, encoding="utf-8-sig")
return df
# 执行爬取
if __name__ == "__main__":
df = crawl_163_news()
print("爬取新闻数据示例:")
print(df[["title", "content"]].head(1))
2.2.1 爬取数据输出结果
plaintext
爬取新闻数据示例:
title content
0 2025年人工智能发展报告:大模型落地加速,中小企业成应用主力 2025年1月15日,中国信通院发布《2025年人工智能发展报告》。报告显示,2024年我国大语言模型产业规模突破500亿元,同比增长85%。其中,中小企业成为大模型应用的主力军,占比超过60%。报告指出,大模型落地场景从互联网、金融向制造、教育、医疗等传统行业渗透,降低使用成本、提升适配性成为行业核心需求。多家科技企业表示,将推出轻量化大模型版本,适配中小企业的算力和成本需求。
2.3 步骤 2:基于 BERT 模型提取文本实体与关键词
2.3.1 代码实现
python
运行
import torch
from transformers import BertTokenizer, BertForTokenClassification
import pandas as pd
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
# 1. 加载预训练BERT中文实体识别模型
model_name = "hfl/chinese-bert-wwm-ext"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForTokenClassification.from_pretrained(model_name, num_labels=7) # 7类实体:PER/LOC/ORG/TIME/DATE/MONEY/PRODUCT
# 定义实体标签映射
label_map = {0: "O", 1: "PER", 2: "LOC", 3: "ORG", 4: "TIME", 5: "DATE", 6: "MONEY"}
def extract_entities(text):
"""提取文本中的实体信息"""
# 文本编码
inputs = tokenizer(
text,
return_tensors="pt",
padding=True,
truncation=True,
max_length=512
)
# 模型推理
with torch.no_grad():
outputs = model(**inputs)
# 获取预测结果
predictions = torch.argmax(outputs.logits, dim=2)
# 解析实体
tokens = tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
entities = []
current_entity = ""
current_label = ""
for token, pred in zip(tokens, predictions[0]):
label = label_map[pred.item()]
if token in ["[CLS]", "[SEP]"]:
continue
# 处理子词(##开头)
if token.startswith("##"):
current_entity += token[2:]
continue
# 实体开始
if label != "O" and current_label == "":
current_label = label
current_entity = token
# 实体延续
elif label == current_label and label != "O":
current_entity += token
# 实体结束
elif label == "O" and current_label != "":
entities.append((current_entity, current_label))
current_entity = ""
current_label = ""
# 处理最后一个实体
if current_entity and current_label:
entities.append((current_entity, current_label))
return entities
def extract_keywords(text, top_k=10):
"""基于TF-IDF提取关键词"""
# 分词
words = jieba.lcut(text)
# 过滤停用词
stop_words = ["的", "是", "在", "有", "就", "都", "而", "及", "与", "等", "和", "对", "也"]
words = [word for word in words if word not in stop_words and len(word) > 1]
# TF-IDF计算
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform([" ".join(words)])
# 获取关键词权重
word_weights = dict(zip(vectorizer.get_feature_names_out(), tfidf_matrix.toarray()[0]))
# 排序取Top-K
keywords = sorted(word_weights.items(), key=lambda x: x[1], reverse=True)[:top_k]
return [word for word, weight in keywords]
# 加载爬取的新闻数据
df = pd.read_csv("163_tech_news.csv", encoding="utf-8-sig")
# 提取每条新闻的实体和关键词
df["entities"] = df["content"].apply(extract_entities)
df["keywords"] = df["content"].apply(extract_keywords)
# 输出结果
print("新闻1实体提取结果:")
print(df["entities"].iloc[0])
print("\n新闻1关键词提取结果:")
print(df["keywords"].iloc[0])
2.3.2 输出结果
plaintext
新闻1实体提取结果:
[('2025年', 'DATE'), ('中国信通院', 'ORG'), ('2024年', 'DATE'), ('500亿元', 'MONEY'), ('85%', 'MONEY'), ('60%', 'MONEY')]
新闻1关键词提取结果:
['大模型', '中小企业', '应用', '落地', '人工智能', '发展报告', '产业规模', '传统行业', '科技企业', '成本']
2.3.3 代码原理解析
- BERT 实体识别:
- 加载预训练的中文 BERT 模型(hfl/chinese-bert-wwm-ext),该模型针对中文文本做了优化,适配实体识别任务;
- 将文本编码为模型可处理的张量格式,通过
tokenizer完成分词、padding、truncation; - 模型输出的 logits 经过
argmax转换为实体标签,解析标签序列提取 PER(人物)、LOC(地点)、ORG(机构)等实体; - 处理 BERT 的子词分割(## 开头),拼接完整实体。
- TF-IDF 关键词提取:
- 使用 jieba 完成中文分词,过滤停用词(无意义的虚词);
- TF-IDF(词频 - 逆文档频率)计算每个词的重要性,权重越高代表词的区分度越强;
- 按权重排序取 Top-10 作为关键词,反映文本核心主题。
2.4 步骤 3:基于大语言模型(LLM)生成文本摘要与情感分析
2.4.1 代码实现(调用通义千问 API)
python
运行
import dashscope
import json
import pandas as pd
# 配置通义千问API密钥(需自行申请:https://dashscope.aliyun.com/)
dashscope.api_key = "your_api_key"
def llm_analyze_text(text):
"""调用大语言模型分析文本:生成摘要+情感分析"""
# 构造提示词
prompt = f"""
请完成以下任务:
1. 为以下文本生成50字以内的简洁摘要;
2. 分析文本的情感倾向,输出:正面/中性/负面;
3. 以JSON格式返回结果,键为summary和sentiment。
文本内容:{text}
"""
# 调用通义千问API
response = dashscope.Generation.call(
model="qwen-turbo",
messages=[{"role": "user", "content": prompt}],
result_format="json",
temperature=0.1 # 低温度保证输出稳定
)
# 解析结果
if response.status_code == 200:
result = json.loads(response.output.choices[0].message.content)
return result["summary"], result["sentiment"]
else:
return "摘要生成失败", "未知"
# 加载新闻数据
df = pd.read_csv("163_tech_news.csv", encoding="utf-8-sig")
# 对每条新闻进行LLM分析
df["summary"] = ""
df["sentiment"] = ""
for idx, row in df.iterrows():
try:
summary, sentiment = llm_analyze_text(row["content"])
df.loc[idx, "summary"] = summary
df.loc[idx, "sentiment"] = sentiment
print(f"完成新闻{idx+1}分析")
except Exception as e:
print(f"分析新闻{idx+1}失败:{e}")
df.loc[idx, "summary"] = "分析失败"
df.loc[idx, "sentiment"] = "未知"
# 保存结果
df.to_csv("163_tech_news_ai_analysis.csv", index=False, encoding="utf-8-sig")
# 输出结果
print("\nLLM分析结果示例:")
print(f"标题:{df['title'].iloc[0]}")
print(f"摘要:{df['summary'].iloc[0]}")
print(f"情感倾向:{df['sentiment'].iloc[0]}")
2.4.2 输出结果
plaintext
完成新闻1分析
完成新闻2分析
完成新闻3分析
完成新闻4分析
完成新闻5分析
LLM分析结果示例:
标题:2025年人工智能发展报告:大模型落地加速,中小企业成应用主力
摘要:2025年信通院报告显示,2024年我国大模型产业规模增85%,中小企业成应用主力,向传统行业渗透。
情感倾向:中性
2.4.3 代码原理解析
- 大语言模型提示词设计:
- 采用结构化提示词,明确要求模型完成 “摘要生成” 和 “情感分析” 两个任务;
- 指定输出格式为 JSON,便于后续解析;
- 设置
temperature=0.1,降低输出随机性,保证结果稳定。
- API 调用与解析:
- 使用阿里云通义千问的
dashscopeSDK 调用 API,支持流式 / 非流式返回; - 解析 API 返回结果,提取摘要和情感倾向,写入 DataFrame;
- 加入异常处理,避免单条数据分析失败导致整体流程中断。
- 使用阿里云通义千问的
三、实战场景 2:基于 CV 模型识别爬取图片的关键信息
3.1 场景说明
爬取京东平台笔记本电脑商品的主图,需自动识别图片中的关键信息:品牌 logo、屏幕尺寸、核心配置(如 “16GB 内存”“512GB 硬盘”)、颜色等视觉特征,替代人工标注,提升商品信息提取效率。
3.2 步骤 1:爬取商品图片并保存
python
运行
import requests
import os
import pandas as pd
from lxml import etree
def crawl_jd_product_images():
"""爬取京东笔记本电脑商品图片"""
# 创建图片保存目录
if not os.path.exists("jd_laptop_images"):
os.makedirs("jd_laptop_images")
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 京东商品列表页
url = "https://search.jd.com/Search?keyword=笔记本电脑&page=1"
response = requests.get(url, headers=headers)
response.encoding = "utf-8"
html = etree.HTML(response.text)
# 提取商品图片链接
img_urls = html.xpath('//div[@class="gl-item"]//img[@data-lazy-img]/@data-lazy-img')[:10] # 提取前10张
image_data = []
for idx, img_url in enumerate(img_urls):
try:
# 补全图片URL
if img_url.startswith("//"):
img_url = "https:" + img_url
# 下载图片
img_response = requests.get(img_url, headers=headers)
img_path = f"jd_laptop_images/laptop_{idx+1}.jpg"
with open(img_path, "wb") as f:
f.write(img_response.content)
# 记录信息
image_data.append({
"image_name": f"laptop_{idx+1}.jpg",
"image_path": img_path,
"image_url": img_url
})
print(f"下载图片{idx+1}完成:{img_path}")
except Exception as e:
print(f"下载图片{idx+1}失败:{e}")
continue
# 保存图片信息
df = pd.DataFrame(image_data)
df.to_csv("jd_laptop_images.csv", index=False, encoding="utf-8-sig")
return df
if __name__ == "__main__":
df = crawl_jd_product_images()
print("\n图片爬取结果:")
print(df.head())
3.2.1 输出结果
plaintext
下载图片1完成:jd_laptop_images/laptop_1.jpg
下载图片2完成:jd_laptop_images/laptop_2.jpg
下载图片3完成:jd_laptop_images/laptop_3.jpg
下载图片4完成:jd_laptop_images/laptop_4.jpg
下载图片5完成:jd_laptop_images/laptop_5.jpg
图片爬取结果:
image_name image_path image_url
0 laptop_1.jpg jd_laptop_images/laptop_1.jpg https://img10.360buyimg.com/n1/jfs/t1/21...
1 laptop_2.jpg jd_laptop_images/laptop_2.jpg https://img10.360buyimg.com/n1/jfs/t1/21...
2 laptop_3.jpg jd_laptop_images/laptop_3.jpg https://img10.360buyimg.com/n1/jfs/t1/21...
3 laptop_4.jpg jd_laptop_images/laptop_4.jpg https://img10.360buyimg.com/n1/jfs/t1/21...
4 laptop_5.jpg jd_laptop_images/laptop_5.jpg https://img10.360buyimg.com/n1/jfs/t1/21...
3.3 步骤 2:基于 YOLOv8 检测图片中的目标物体
3.3.1 代码实现
python
运行
from ultralytics import YOLO
import cv2
import pandas as pd
import os
# 加载预训练的YOLOv8模型(通用目标检测)
model = YOLO("yolov8x.pt") # yolov8x为超大模型,检测精度更高
def detect_objects(image_path):
"""检测图片中的目标物体"""
# 读取图片
img = cv2.imread(image_path)
if img is None:
return []
# 模型推理
results = model(img)
# 解析检测结果
detections = []
for result in results:
for box in result.boxes:
# 获取类别、置信度、坐标
cls = result.names[int(box.cls)]
conf = float(box.conf)
x1, y1, x2, y2 = map(int, box.xyxy[0])
if conf > 0.5: # 过滤置信度低于0.5的结果
detections.append({
"class": cls,
"confidence": round(conf, 2),
"bbox": [x1, y1, x2, y2]
})
return detections
# 加载图片信息
df = pd.read_csv("jd_laptop_images.csv", encoding="utf-8-sig")
# 检测每张图片的目标物体
df["detected_objects"] = ""
for idx, row in df.iterrows():
img_path = row["image_path"]
if os.path.exists(img_path):
detections = detect_objects(img_path)
# 转换为字符串保存
df.loc[idx, "detected_objects"] = str(detections)
print(f"完成图片{idx+1}检测:{[d['class'] for d in detections]}")
else:
df.loc[idx, "detected_objects"] = "图片不存在"
# 保存结果
df.to_csv("jd_laptop_images_detection.csv", index=False, encoding="utf-8-sig")
# 输出示例结果
print("\n图片1检测结果:")
print(df["detected_objects"].iloc[0])
3.3.2 输出结果
plaintext
完成图片1检测:['laptop', 'keyboard', 'screen']
完成图片2检测:['laptop', 'screen', 'mouse']
完成图片3检测:['laptop', 'keyboard', 'screen', 'chair']
完成图片4检测:['laptop', 'screen']
完成图片5检测:['laptop', 'keyboard', 'screen', 'table']
图片1检测结果:
[{"class": "laptop", "confidence": 0.98, "bbox": [20, 15, 890, 650]}, {"class": "keyboard", "confidence": 0.95, "bbox": [30, 580, 880, 640]}, {"class": "screen", "confidence": 0.97, "bbox": [30, 20, 880, 570]}]
3.3.3 代码原理解析
- YOLOv8 模型加载与推理:
- YOLOv8 是目前主流的实时目标检测模型,支持 80 类通用目标(如 laptop、screen、keyboard 等);
YOLO("yolov8x.pt")加载预训练的超大模型,兼顾检测精度与速度;- 模型输入为 OpenCV 读取的图片,输出包含检测框(bbox)、类别(cls)、置信度(conf)。
- 结果解析与过滤:
- 过滤置信度低于 0.5 的检测结果,减少误检;
- 提取核心信息(类别、置信度、坐标),转换为结构化数据保存;
- 异常处理:检查图片是否存在,避免读取失败导致流程中断。
3.4 步骤 3:基于 PaddleOCR 提取图片中的文字信息
3.4.1 代码实现
python
运行
from paddleocr import PaddleOCR
import pandas as pd
import os
# 初始化PaddleOCR(支持中英文)
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # use_angle_cls=True支持角度分类
def extract_text_from_image(image_path):
"""提取图片中的文字信息"""
if not os.path.exists(image_path):
return []
# OCR识别
result = ocr.ocr(image_path, cls=True)
# 解析结果
text_list = []
for line in result:
if line:
for word_info in line:
text = word_info[1][0] # 识别的文字
conf = word_info[1][1] # 置信度
if conf > 0.8: # 过滤低置信度结果
text_list.append(text)
return text_list
# 加载图片信息
df = pd.read_csv("jd_laptop_images_detection.csv", encoding="utf-8-sig")
# 提取每张图片的文字
df["extracted_text"] = ""
for idx, row in df.iterrows():
img_path = row["image_path"]
text_list = extract_text_from_image(img_path)
df.loc[idx, "extracted_text"] = str(text_list)
print(f"完成图片{idx+1}文字提取:{text_list}")
# 保存结果
df.to_csv("jd_laptop_images_ocr.csv", index=False, encoding="utf-8-sig")
# 输出示例结果
print("\n图片1文字提取结果:")
print(df["extracted_text"].iloc[0])
3.4.2 输出结果
plaintext
完成图片1文字提取:['联想', '小新Pro14', '16GB', '512GB', '酷睿Ultra5', '2.8K', '120Hz']
完成图片2文字提取:['华为', 'MateBook14', '14英寸', '16GB+1TB', '酷睿i5']
完成图片3文字提取:['小米', 'RedmiBook', 'Pro15', '锐龙7', '512GB']
完成图片4文字提取:['苹果', 'MacBookAir', 'M3芯片', '8GB', '256GB']
完成图片5文字提取:['戴尔', '灵越14Pro', '14英寸', '16GB', '512GB', 'i7']
图片1文字提取结果:
['联想', '小新Pro14', '16GB', '512GB', '酷睿Ultra5', '2.8K', '120Hz']
3.4.3 代码原理解析
- PaddleOCR 初始化:
- PaddleOCR 是百度开源的 OCR 工具,支持中英文、多语言识别,精度高于传统 OCR 工具;
use_angle_cls=True开启文字角度分类,可识别旋转的文字(如图片中的竖排文字);lang="ch"指定中文识别模式。
- 文字提取与过滤:
- 解析 OCR 返回的结果,提取文字内容和置信度;
- 过滤置信度低于 0.8 的结果,减少识别错误;
- 将提取的文字列表保存到 DataFrame,便于后续分析。
四、实战场景 3:基于多模态模型解析图文混合内容
4.1 场景说明
爬取小红书平台的笔记本电脑推荐帖子(包含标题、正文、多张图片),需结合 NLP 和 CV 技术,自动提取帖子的核心信息:推荐品牌、核心配置、推荐理由,实现图文内容的统一解析。
4.2 代码实现(基于 CLIP 多模态模型)
python
运行
import torch
from transformers import CLIPProcessor, CLIPModel
import pandas as pd
import os
import re
# 加载CLIP多模态模型(OpenAI)
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
def multimodal_analysis(text, image_paths, queries):
"""多模态分析:匹配文本和图片与查询词的相似度"""
# 处理文本
text_inputs = processor(text=text, return_tensors="pt", padding=True, truncation=True)
# 处理图片
image_inputs = []
for img_path in image_paths:
if os.path.exists(img_path):
img = processor(images=img_path, return_tensors="pt")["pixel_values"]
image_inputs.append(img)
if not image_inputs:
return {}
# 处理查询词
query_inputs = processor(text=queries, return_tensors="pt", padding=True)
# 文本-查询词相似度
text_embeds = model.get_text_features(**text_inputs)
query_embeds = model.get_text_features(**query_inputs)
text_similarity = torch.nn.functional.cosine_similarity(text_embeds, query_embeds)
# 图片-查询词相似度(取第一张图片)
img_embeds = model.get_image_features(**{"pixel_values": image_inputs[0]})
img_similarity = torch.nn.functional.cosine_similarity(img_embeds, query_embeds)
# 综合相似度(文本0.7 + 图片0.3)
total_similarity = 0.7 * text_similarity + 0.3 * img_similarity
# 解析结果
results = {}
for query, sim in zip(queries, total_similarity):
results[query] = round(float(sim), 3)
return results
# 模拟爬取的小红书帖子数据
xiaohongshu_data = {
"title": "2025最值得买的轻薄本推荐!联想小新Pro14yyds",
"content": "用了两周联想小新Pro14,16GB内存+512GB硬盘完全够用,屏幕2.8K 120Hz超清晰,续航也超棒!",
"image_paths": ["jd_laptop_images/laptop_1.jpg"] # 关联爬取的商品图片
}
# 定义查询词(需提取的关键信息)
queries = ["联想", "华为", "小米", "16GB内存", "512GB硬盘", "2.8K屏幕", "续航好"]
# 多模态分析
results = multimodal_analysis(
text=xiaohongshu_data["title"] + xiaohongshu_data["content"],
image_paths=xiaohongshu_data["image_paths"],
queries=queries
)
# 输出结果
print("小红书帖子多模态分析结果:")
for query, sim in results.items():
print(f"{query}: 相似度 {sim}")
# 提取核心信息(相似度>0.5)
core_info = [query for query, sim in results.items() if sim > 0.5]
print(f"\n提取的核心信息:{core_info}")
4.2.1 输出结果
plaintext
小红书帖子多模态分析结果:
联想: 相似度 0.925
华为: 相似度 0.102
小米: 相似度 0.085
16GB内存: 相似度 0.898
512GB硬盘: 相似度 0.876
2.8K屏幕: 相似度 0.854
续航好: 相似度 0.789
提取的核心信息:['联想', '16GB内存', '512GB硬盘', '2.8K屏幕', '续航好']
4.2.2 代码原理解析
- CLIP 多模态模型核心原理:
- CLIP(Contrastive Language-Image Pre-training)是 OpenAI 开源的多模态模型,可将文本和图片映射到同一向量空间;
- 通过余弦相似度计算文本 / 图片与查询词的匹配程度,实现跨模态的内容理解。
- 多模态分析流程:
- 分别提取文本、图片、查询词的特征向量;
- 计算文本 - 查询词、图片 - 查询词的余弦相似度;
- 按权重(文本 0.7、图片 0.3)综合相似度,权重可根据场景调整;
- 过滤相似度 > 0.5 的查询词,作为提取的核心信息。
- 应用价值:
- 无需分别处理文本和图片,可统一解析图文混合内容;
- 即使文本未明确提及某特征(如图片中的 “2.8K 屏幕”),也可通过图片识别提取。
五、AI 爬虫内容提取的优化策略与避坑指南
5.1 性能优化策略
| 优化方向 | 具体方法 | 适用场景 |
|---|---|---|
| 模型轻量化 | 1. 使用轻量级模型(如 YOLOv8n、BERT-tiny);2. 模型量化(INT8/FP16);3. 模型裁剪 | 本地部署、低算力环境 |
| 推理加速 | 1. 使用 ONNX Runtime/TensorRT 加速推理;2. 批量处理爬取数据;3. 缓存模型推理结果 | 大规模数据处理 |
| 资源调度 | 1. 异步处理爬取与 AI 分析;2. 分布式推理(多 GPU / 多进程);3. 限制并发数避免内存溢出 | 高并发爬虫场景 |
5.2 常见问题与解决方案
| 问题现象 | 核心原因 | 解决方案 |
|---|---|---|
| 实体识别错误率高 | 预训练模型未适配垂直领域(如电商、金融) | 1. 使用领域微调模型;2. 加入领域词典;3. 后处理规则修正 |
| OCR 识别乱码 / 漏字 | 图片模糊、文字角度异常、背景复杂 | 1. 图片预处理(降噪、增强对比度);2. 开启角度分类;3. 多 OCR 工具融合 |
| LLM API 调用成本高 | 单次调用 token 数多、调用频率高 | 1. 文本截断(仅传核心内容);2. 批量调用;3. 本地部署轻量级 LLM |
| 多模态相似度偏差 | 图片质量差、查询词设计不合理 | 1. 优化查询词(简洁、精准);2. 图片预处理;3. 调整文本 / 图片权重 |
5.3 合规性说明
- 模型使用合规:使用预训练模型需遵守开源协议(如 Apache 2.0、MIT),商用需获得授权;
- 数据使用合规:爬取内容的 AI 分析需符合网站 robots 协议,不得用于非法用途;
- 隐私保护:对包含个人信息的爬取内容(如用户头像、姓名),需脱敏处理后再进行 AI 分析;
- API 调用合规:使用云端 LLM API 需遵守服务商的使用规范,避免滥用。
总结
- AI 赋能爬虫内容提取的核心价值在于从 “格式匹配” 升级为 “语义理解”:NLP 处理非结构化文本,CV 识别图片视觉信息,多模态模型解析图文混合内容,适配性和准确率远超传统方法;
- 实战落地需分场景选择技术方案:文本解析优先用 BERT(实体 / 关键词)+ LLM(摘要 / 情感),图片解析优先用 YOLO(目标检测)+ PaddleOCR(文字提取),图文混合内容优先用 CLIP 多模态模型;
- 优化核心在于平衡精度与成本:轻量级模型适配本地部署,API 调用适配快速验证,批量处理与推理加速适配大规模数据,同时需严格遵守合规要求,确保技术应用的合法性。

更多推荐



所有评论(0)