生成式AI驱动的智能采集实战

爬虫代理

项目背景

在当前内容驱动的应用生态中,实时获取新闻资讯成为舆情分析、行业追踪和自动写作系统的基础能力。然而传统采集方案在面对动态结构、反爬机制和接口变动时效率低下、维护成本高。

本项目以“今日头条”站内搜索为目标,设计一套结合生成式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策略:

  1. 自动构造头部参数组合;
  2. 智能代理池切换;
  3. 解析HTML结构中隐藏字段,确保数据完整性;
  4. 提取信息 → 分类存储 → 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等组件,扩展为一个面向舆情/媒体聚合/文本挖掘的可复用平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值