项目背景
在当前内容驱动的应用生态中,实时获取新闻资讯成为舆情分析、行业追踪和自动写作系统的基础能力。然而传统采集方案在面对动态结构、反爬机制和接口变动时效率低下、维护成本高。
本项目以“今日头条”站内搜索为目标,设计一套结合生成式AI策略 + 爬虫代理 + 用户模拟行为 + 自动摘要生成的智能采集方案,实现对指定关键词的前10条新闻标题、作者、发布时间、正文内容的提取与分类存储,并生成AI摘要,帮助开发者构建更鲁棒的采集系统。
错误示例:传统采集“蛮力”访问,代理配置缺失
import requests
def wrong_toutiao_search(keyword):
url = f'https://www.toutiao.com/search_content/?keyword={keyword}'
response = requests.get(url)
return response.text
print(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_url
author = 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等组件,扩展为一个面向舆情/媒体聚合/文本挖掘的可复用平台。