2026年第二届人工智能与产品设计国际学术会议 (AIPD 2026)

官网:https://ais.cn/u/ZZ7baa

时间: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 场景说明

爬取网易新闻的科技类新闻文本,字段包括:新闻标题、正文内容、发布时间,需自动提取以下关键信息:

  1. 文本实体(人物、机构、地点);
  2. 核心关键词(Top10);
  3. 新闻摘要(50 字以内);
  4. 情感倾向(正面 / 中性 / 负面)。

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 代码原理解析
  1. BERT 实体识别
    • 加载预训练的中文 BERT 模型(hfl/chinese-bert-wwm-ext),该模型针对中文文本做了优化,适配实体识别任务;
    • 将文本编码为模型可处理的张量格式,通过tokenizer完成分词、padding、truncation;
    • 模型输出的 logits 经过argmax转换为实体标签,解析标签序列提取 PER(人物)、LOC(地点)、ORG(机构)等实体;
    • 处理 BERT 的子词分割(## 开头),拼接完整实体。
  2. 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 代码原理解析
  1. 大语言模型提示词设计
    • 采用结构化提示词,明确要求模型完成 “摘要生成” 和 “情感分析” 两个任务;
    • 指定输出格式为 JSON,便于后续解析;
    • 设置temperature=0.1,降低输出随机性,保证结果稳定。
  2. API 调用与解析
    • 使用阿里云通义千问的dashscope SDK 调用 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 代码原理解析
  1. YOLOv8 模型加载与推理
    • YOLOv8 是目前主流的实时目标检测模型,支持 80 类通用目标(如 laptop、screen、keyboard 等);
    • YOLO("yolov8x.pt")加载预训练的超大模型,兼顾检测精度与速度;
    • 模型输入为 OpenCV 读取的图片,输出包含检测框(bbox)、类别(cls)、置信度(conf)。
  2. 结果解析与过滤
    • 过滤置信度低于 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 代码原理解析
  1. PaddleOCR 初始化
    • PaddleOCR 是百度开源的 OCR 工具,支持中英文、多语言识别,精度高于传统 OCR 工具;
    • use_angle_cls=True开启文字角度分类,可识别旋转的文字(如图片中的竖排文字);
    • lang="ch"指定中文识别模式。
  2. 文字提取与过滤
    • 解析 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 代码原理解析
  1. CLIP 多模态模型核心原理
    • CLIP(Contrastive Language-Image Pre-training)是 OpenAI 开源的多模态模型,可将文本和图片映射到同一向量空间;
    • 通过余弦相似度计算文本 / 图片与查询词的匹配程度,实现跨模态的内容理解。
  2. 多模态分析流程
    • 分别提取文本、图片、查询词的特征向量;
    • 计算文本 - 查询词、图片 - 查询词的余弦相似度;
    • 按权重(文本 0.7、图片 0.3)综合相似度,权重可根据场景调整;
    • 过滤相似度 > 0.5 的查询词,作为提取的核心信息。
  3. 应用价值
    • 无需分别处理文本和图片,可统一解析图文混合内容;
    • 即使文本未明确提及某特征(如图片中的 “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 合规性说明

  1. 模型使用合规:使用预训练模型需遵守开源协议(如 Apache 2.0、MIT),商用需获得授权;
  2. 数据使用合规:爬取内容的 AI 分析需符合网站 robots 协议,不得用于非法用途;
  3. 隐私保护:对包含个人信息的爬取内容(如用户头像、姓名),需脱敏处理后再进行 AI 分析;
  4. API 调用合规:使用云端 LLM API 需遵守服务商的使用规范,避免滥用。

总结

  1. AI 赋能爬虫内容提取的核心价值在于从 “格式匹配” 升级为 “语义理解”:NLP 处理非结构化文本,CV 识别图片视觉信息,多模态模型解析图文混合内容,适配性和准确率远超传统方法;
  2. 实战落地需分场景选择技术方案:文本解析优先用 BERT(实体 / 关键词)+ LLM(摘要 / 情感),图片解析优先用 YOLO(目标检测)+ PaddleOCR(文字提取),图文混合内容优先用 CLIP 多模态模型;
  3. 优化核心在于平衡精度与成本:轻量级模型适配本地部署,API 调用适配快速验证,批量处理与推理加速适配大规模数据,同时需严格遵守合规要求,确保技术应用的合法性。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐