自动化资讯系统构建:反爬策略与工作流编排
研究背景
在信息爆炸的时代,及时获取高质量行业资讯是内容创作者和运营者的刚需。无论是技术动态还是市场趋势,第一时间掌握热点并进行内容输出,是提升影响力的关键手段。为了实现日更目标,很多人开始探索自动化路径——使用爬虫工具定期抓取目标网站,借助 AI 模型生成摘要,再推送到社群平台。
这一流程的核心在于稳定、高效地获取网页数据。但在实际操作中,常会遇到以下问题:
- 验证码阻断自动化流程;
- 请求返回 403 Forbidden,提示 IP 被封禁;
- 目标网站对常用 IP 段进行临时封禁,切换机器或重启网络也无济于事。
当处于非爬虫操作时,如果在 F12 控制台输入 window.navigator.webdriver 显示为 true,或者出现 Failed to load resource: the server responded with a status of 400 报错,这通常是典型的反爬机制检测到了 Selenium 等自动化工具。许多新手遇到这种情况会一头雾水,实际上这是因为网站运行了 JavaScript 检测代码,针对自动化脚本的特性进行了检查。一旦被识别,网站便会触发风控,阻止访问请求。
反爬机制与解决方案
起初,常规手段如更换 User-Agent、动态调整频率、引入 Selenium 渲染页面、OCR 识别验证码或使用开源代理池轮换 IP 都尝试过,但效果并不理想:验证码识别率低、免费代理失效快、自建 IP 池成本高且维护复杂。有些网站的反爬机制智能程度极高,行为模式识别异常即封。
为了解决这些问题,我们引入了具备 Web Unlocker 功能的代理服务。它不只是换了个 IP,而是提供了一个集代理、反检测、验证码处理、重试机制于一体的全流程解决方案。
核心亮点
- 自动解锁复杂网页:无需手动维护浏览器逻辑。Web Unlocker 通过自动执行 JavaScript 代码、处理 Cookie 与 Headers 关系、识别并绕过跳转,直接返回渲染完成的页面源码。
- 智能身份伪装:内置失败重试与自动换 IP 机制。系统会根据响应状态智能切换策略,模拟真实浏览行为(动态 UA、鼠标轨迹等),最大限度提升成功率。
- 全球资源支持:依托全球 IP 资源池,涵盖住宅、移动、数据中心 IP,支持按地理位置筛选,非常适合跨地区数据对比。
实战步骤
下面介绍如何利用代理服务结合 n8n 和 ChatGPT API,构建一个完全自动化的新闻摘要推送系统。
1. 配置代理服务
首先需要在服务商后台完成基础配置。进入代理管理面板,选择'网页解锁器'服务。为当前的解锁通道添加清晰的描述,方便后续任务回顾。保存后,系统将生成通道 ID 及相关配置信息,包括 Proxy Host、Port、Username 和 Password。
2. 编写数据采集脚本
使用 Python 编写核心抓取逻辑。利用 requests 发送 HTTP 请求,BeautifulSoup 解析 HTML。由于目标网站有反爬机制,需通过配置的代理服务 URL 进行访问。
import requests
from bs4 import BeautifulSoup
import warnings
# 忽略 SSL 警告
warnings.filterwarnings('ignore', message='Unverified HTTPS request')
# 代理配置
proxy_host = "brd.superproxy.io"
proxy_port = "33335"
username = "brd-customer-hl_d8430cdd-zone-keyanshuju1"
password = "yj4qaotb7edx"
# 构建代理 URL
proxy_url = f"{proxy_host}:{proxy_port}"
proxy_auth = f"{username}:{password}"
proxies = {
"http": f"http://{proxy_auth}@{proxy_url}",
"https": f"http://{proxy_auth}@{proxy_url}"
}
def parse_news(html_content, url):
"""解析新闻内容"""
soup = BeautifulSoup(html_content, 'html.parser')
articles = []
# 多种可能的新闻项选择器,应对网页结构变化
selectors = [
'a.article-item-title', '.article-item-title',
'a[class*="title"]', '.news-item a',
'h3 a', 'h2 a', '.item-title a'
]
print(f"正在解析页面:{url}")
for selector in selectors:
try:
elements = soup.select(selector)
if elements:
print(f"使用选择器 '{selector}' 找到 {len(elements)} 个元素")
for element in elements:
title = element.get_text(strip=True)
link = element.get("href")
if title and len(title) > 5:
# 处理相对链接
if link:
if link.startswith("/"):
full_link = f"https://36kr.com{link}"
elif not link.startswith("http"):
full_link = f"https://36kr.com/{link}"
else:
full_link = link
else:
full_link = "链接不可用"
articles.append({'title': title, 'link': full_link, 'source': url})
if articles:
break
except Exception as e:
print(f"选择器 '{selector}' 解析失败:{e}")
return articles
3. 工作流编排 (n8n)
n8n 是一款开源的流程自动化工具,在本项目中承担调度器和执行器的角色。
- 定时触发:使用 Cron 节点设定每日执行时间,例如早 9 点和晚 6 点。
- HTTP 请求:调用代理服务接口获取目标新闻网站首页 HTML 内容。
- 数据解析:提取每篇文章的标题与链接,结构化输出为 JSON。
- AI 摘要生成:调用 GPT-4 API 为每条新闻生成 50-100 字的摘要。
4. AI 摘要生成模块
使用 OpenAI 的 ChatGPT API 对抓取到的新闻内容进行摘要生成。相比传统关键词提取,LLM 能更准确理解文章意图。
{
"role": "system",
"content": "你是一名资深 IT 行业媒体编辑,请对以下新闻生成简洁明了的摘要,要求语言客观、中立、不重复标题,字数控制在 150 字以内。"
}
用户 Prompt 示例:
{
"role": "user",
"content": "标题:小鹏瘦身,蔚来学得会吗?\n链接:https://36kr.com/p/3305015892810496"
}
5. 消息推送至微信
n8n 本身不直接支持推送数据到个人微信,但可以通过企业微信机器人或第三方服务实现。这里使用 WxPusher 作为中间件,将信息推送到微信客户端。
在 n8n 中添加 HTTP Request 节点,Method 选 POST,Headers 设置 Content-Type: application/json。Body 使用 Raw JSON 格式:
{
"msgtype": "markdown",
"markdown": {
"content": "【{{json.title}}】\n> {{json.summary}}\n\n[阅读全文]({{json.url}})"
}
}
若需通过 Python 独立发送,可参考以下代码:
def wx_pusher_send_message(message):
import requests
import json
app_token = 'xxx'
uid = 'xxx'
data = {
"appToken": app_token,
"content": message,
"summary": message,
"contentType": 1,
"topicIds": [123],
"uids": [uid],
"url": "https://wxpusher.zjiecode.com",
"verifyPay": False
}
json_data = json.dumps(data)
url = "https://wxpusher.zjiecode.com/api/send/message"
headers = {'Content-Type': "application/json"}
response = requests.post(url, data=json_data, headers=headers)
print("request:", response)
return response
通过这一闭环设计,不仅解决了反爬痛点,还极大提升了信息处理与分发的效率。借助自动化流程编排与大模型文本生成能力,整个内容流程变成了可复用、低门槛的工作流,节省了人工整理与发布成本。


