生成式AI驱动的智能采集实战
项目背景
在当前内容驱动的应用生态中,实时获取新闻资讯成为舆情分析、行业追踪和自动写作系统的基础能力。然而传统采集方案在面对动态结构、反爬机制和接口变动时效率低下、维护成本高。
本项目以“今日头条”站内搜索为目标,设计一套结合生成式AI策略 + 爬虫代理 + 用户模拟行为 + 自动摘要生成的智能采集方案,实现对指定关键词的前10条新闻标题、作者、发布时间、正文内容的提取与分类存储,并生成AI摘要,帮助开发者构建更鲁棒的采集系统。
错误示例:传统采集“蛮力”访问,代理配置缺失
import requestsdef wrong_toutiao_search(keyword):url = f'https://www.toutiao.com/search_content/?keyword={keyword}'response = requests.get(url)return response.textprint(wrong_toutiao_search('人工智能'))
问题分析:
- 无代理,极易触发IP封锁;
- 未设置User-Agent等信息,请求头暴露爬虫特征;
- 接口参数错误,目标接口并非搜索入口;
- 无结构化解析与分类存储。
正确姿势:生成式AI辅助构建智能请求,提升反爬稳定性
模拟生成式AI策略:
- 自动构造头部参数组合;
- 智能代理池切换;
- 解析HTML结构中隐藏字段,确保数据完整性;
- 提取信息 → 分类存储 → AI自动生成摘要。
完整代码实现(含摘要功能)
import requests
from bs4 import BeautifulSoup
import random
import time
import json
import os
from collections import defaultdict# ========== 亿牛云代理配置 www.16yun.cn==========
proxy_host = "proxy.16yun.cn" # 替换为你的亿牛云代理域名
proxy_port = "3100" # 替换为你的亿牛云代理端口
proxy_user = "16IP" # 替换为你的亿牛云代理用户名
proxy_pass = "16YUN" # 替换为你的亿牛云代理密码proxies = {"http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}","https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}# ========== 自定义headers ==========
headers = {"User-Agent": random.choice(["Mozilla/5.0 (Windows NT 10.0; Win64; x64)","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)","Mozilla/5.0 (X11; Ubuntu; Linux x86_64)"]),"Cookie": "tt_webid=1234567890abcdef;" # 可按需模拟登录后的cookie
}# ========== 模拟生成式AI进行摘要生成 ==========
def generate_summary(text, model="local"):prompt = f"请用中文总结以下新闻内容,不超过100字:\n\n{text.strip()}\n\n摘要:"if model == "local":return fake_llm_response(prompt)return "摘要生成失败"def fake_llm_response(prompt):return "本文报道了人工智能在多个行业中的新趋势,涉及教育、医疗等场景的实际应用。"# ========== 新闻抓取 + 摘要生成 ==========
def search_and_summarize(keyword):search_url = f"https://www.toutiao.com/search/?keyword={keyword}"response = requests.get(search_url, headers=headers, proxies=proxies, timeout=10)soup = BeautifulSoup(response.text, "html.parser")results = []for idx, article in enumerate(soup.select("div[data-click-log]")[:10]):try:title = article.select_one('a').text.strip()relative_url = article.select_one('a')['href']url = 'https://www.toutiao.com' + relative_urlauthor = article.select_one('.lbtn').text.strip() if article.select_one('.lbtn') else "未知作者"time_text = article.select_one('.time').text.strip() if article.select_one('.time') else "未知时间"# 获取正文detail_res = requests.get(url, headers=headers, proxies=proxies, timeout=10)detail_soup = BeautifulSoup(detail_res.text, "html.parser")paragraphs = detail_soup.select("article p")content = "\n".join([p.text for p in paragraphs]) or "正文抓取失败"# AI摘要summary = generate_summary(content)results.append({"标题": title,"链接": url,"作者": author,"时间": time_text,"正文": content,"摘要": summary})except Exception as e:print(f"[跳过] 第{idx+1}条解析失败: {e}")time.sleep(0.5)return results# ========== 分类存储 ==========
def store_results(keyword, results):data_by_author = defaultdict(list)for item in results:data_by_author[item['作者']].append(item)os.makedirs("output", exist_ok=True)with open(f"output/{keyword}_results.json", "w", encoding="utf-8") as f:json.dump(data_by_author, f, ensure_ascii=False, indent=2)print(f"结果已保存至 output/{keyword}_results.json")# ========== 主程序 ==========
if __name__ == "__main__":kw = "人工智能"news_data = search_and_summarize(kw)store_results(kw, news_data)
原因解释:AI策略如何提升采集的鲁棒性?
技术策略 | 效果 |
---|---|
动态User-Agent | 模拟多终端访问,打散访问特征,规避静态规则封禁 |
Cookie注入 | 模拟真实用户行为路径,提升数据展示完整度 |
代理IP池 | 分布式访问策略,突破访问频率与地域限制 |
AI辅助解析结构 | 自动适配DOM变动、标签缺失、广告干扰,提高数据提取准确率 |
自动摘要生成 | 提高后续聚合、索引与推荐效率,为内容智能化打基础 |
陷阱提示
陷阱类型 | 避坑建议 |
---|---|
❌ IP直接访问 | 使用优质代理(如亿牛云),支持动态住宅/独享节点切换 |
❌ Cookie失效 | 使用AI自动获取或通过Selenium模拟登录获取真实cookie |
❌ 数据解析错误 | 结合AI工具如LangChain识别文章段落结构,提高内容抽取质量 |
❌ 接口被改版 | 避免依赖API,直接从页面HTML结构中提取 |
❌ 摘要无效/空 | 为异常情况准备默认摘要或启用重试机制,避免摘要流程中断 |
模板推荐:智能采集架构
┌────────────┐
│关键词输入 │
└────┬───────┘▼
┌────────────┐
│生成式AI辅助构造请求头│
└────┬───────┘▼
┌────────────┐
│代理IP调度 │
└────┬───────┘▼
┌────────────┐
│页面访问+防封策略 │
└────┬───────┘▼
┌────────────┐
│HTML解析器提取结构化内容│
└────┬───────┘▼
┌────────────┐
│摘要生成模块(AI) │
└────┬───────┘▼
┌────────────┐
│分类存储 + 聚合输出 │
└────────────────┘
总结提升
- 本文以“今日头条关键词搜索”为例,展示了如何结合生成式AI与反爬技术(代理、cookie、User-Agent)构建一个具备稳定访问、结构化提取与AI摘要能力的“智能采集”;
- 对比传统错误代码,完整示范了构建请求、规避封禁、提取正文、摘要生成并分类保存的全过程;
- 推荐将该框架进一步融合LangChain、Milvus等组件,扩展为一个面向舆情/媒体聚合/文本挖掘的可复用平台。