脚本如何聚合多平台资讯内容

wen 实用脚本 32

本文目录导读:

脚本如何聚合多平台资讯内容

  1. 核心思路:统一的数据模型
  2. 方案一:利用现成的 RSS 源(最简单、最稳定)
  3. 方案二:针对开放API的非RSS平台(如Twitter、Telegram)
  4. 方案三:爬虫方式(针对无RSS/API的封闭平台,高风险)
  5. 方案四:使用无代码/低代码平台(最适合非程序员)
  6. 最终建议:如何选择?

数据获取解析结构化以及去重聚合,由于各平台(如微博、知乎、微信公众号、新闻网站、RSS源等)的反爬机制、API开放程度和页面结构各不相同,没有一套通用的脚本能直接“一键聚合”。

可以基于不同的技术路线来构建这样的脚本,以下是几种主流且可行的实现方案,从简单到复杂排列,并包含风险提示。

核心思路:统一的数据模型

在写脚本前,先定义好每条资讯的通用结构,便于后续处理和输出:

{: "资讯标题",
  "url": "原始链接",
  "source": "来源平台(如: 36氪, 微博, 微信公众号)",
  "publish_time": "发布时间(统一为时间戳或标准格式)",
  "summary": "摘要或正文前200字",
  "content": "完整正文(可选,根据存储空间)",
  "tags": ["标签1", "标签2"]
}

利用现成的 RSS 源(最简单、最稳定)

很多平台(如知乎、掘金、少数派、V2EX、Hacker News)都提供公开的RSS/Atom Feed,这是最推荐的聚合方式,因为:

  • 无需破解反爬:平台主动提供给机器读取的格式(XML/JSON)。
  • 稳定:只要源不关闭,脚本基本不需要维护。
  • 规范、时间、链接、摘要都是现成的。

技术选型:Python 的 feedparser 库。

核心代码示例

import feedparser
import time
import json
# 1. 定义需要聚合的 RSS 源列表
RSS_FEEDS = [
    {
        "name": "知乎日报",
        "url": "https://daily.zhihu.com/story/rss"
    },
    {
        "name": "36氪快讯",
        "url": "https://36kr.com/feed"
    },
    {
        "name": "V2EX最热",
        "url": "https://www.v2ex.com/index.xml"
    }
]
# 2. 统一解析函数
def parse_rss(feed_entry):
    return {
        "title": feed_entry.get("title", ""),
        "url": feed_entry.get("link", ""),
        "source": feed_entry.get("source", {}).get("title", "Unknown"),
        "publish_time": feed_entry.get("published_parsed", time.gmtime()),
        "summary": feed_entry.get("summary", "")[:200],
        "content": feed_entry.get("content", [{}])[0].get("value", "") if feed_entry.get("content") else ""
    }
# 3. 聚合所有源
def aggregate_all():
    aggregated = []
    for feed_info in RSS_FEEDS:
        try:
            feed = feedparser.parse(feed_info["url"])
            for entry in feed.entries:
                item = parse_rss(entry)
                item["source"] = feed_info["name"]
                aggregated.append(item)
        except Exception as e:
            print(f"获取 {feed_info['name']} 失败: {e}")
        time.sleep(0.5)  # 礼貌性延迟
    # 按发布时间降序排列
    aggregated.sort(key=lambda x: x["publish_time"], reverse=True)
    return aggregated
# 4. 输出为JSON
if __name__ == "__main__":
    result = aggregate_all()
    with open("aggregated_news.json", "w", encoding="utf-8") as f:
        json.dump(result, f, ensure_ascii=False, indent=2)

针对开放API的非RSS平台(如Twitter、Telegram)

有些平台不提供RSS,但有更强大的API(如Twitter V2 API、Telegram Bot API、Discord Webhook),虽然需要申请API Key,但依然是合法且稳定的途径。

通过 Telegram Bot 监听公开频道/群的资讯

  1. 申请 Bot Token。
  2. 获取需要监听的 Channel ID。
  3. 使用 python-telegram-bot 库或直接调用 getUpdates API 拉取消息。

监听特定 Twitter 账号的推文

  1. 申请 Twitter Developer Account,获得 Bearer Token。

  2. 使用 tweepy 库:

    import tweepy
    client = tweepy.Client(bearer_token='YOUR_TOKEN')
    # 获取用户最近推文
    tweets = client.get_users_tweets(id='用户ID', max_results=100)
    for tweet in tweets.data:
        print(tweet.text)

爬虫方式(针对无RSS/API的封闭平台,高风险)

对于不提供RSS、且没有开放API的平台(如微信公众号、知乎问题页、某些新闻网站),需要使用爬虫(Scraping)。

风险提示

  • 法律风险:未经授权爬取受版权保护的内容可能构成侵权。
  • 账号风险:频繁请求可能导致IP被封或被平台起诉。
  • 维护成本高:页面结构(CSS选择器/XPath)随时可能变化,脚本需频繁更新。

技术路线

  1. 请求库requests(静态页面)或 playwright/selenium(动态渲染的JS页面)。
  2. 解析库BeautifulSoup(解析HTML)或 lxml(性能更好)。
  3. 反爬应对(需谨慎):
    • 模拟 User-Agent 和 Referer。
    • 使用代理IP池。
    • 限制请求频率(如 2-5秒/次)。

伪代码示例(抓取某个支持静态页面的网站)

import requests
from bs4 import BeautifulSoup
import time
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
def scrape_news_website(url):
    response = requests.get(url, headers=HEADERS, timeout=10)
    soup = BeautifulSoup(response.text, 'html.parser')
    items = []
    # 假设每条新闻在 <div class="news-item"> 中
    for item in soup.select("div.news-item > a"):
        title = item.text.strip()
        link = item.get("href")
        # 时间、摘要需根据实际结构提取
        items.append({"title": title, "url": link, "source": "某网站"})
    return items

使用无代码/低代码平台(最适合非程序员)

如果不想写代码维护脚本,可以使用现成的自动化工具:

  1. RSSHub(开源):一个万能RSS生成器,很多平台没有原生RSS,但RSSHub社区提供了数千种路由(如微博热搜、知乎专栏、B站动态等),你可以自建一个RSSHub实例,然后通过方案一读取。
  2. n8n / IFTTT / Zapier:通过可视化连线,将“新文章”触发到“数据库”或“通知”。
  3. Huginn:一个自部署的Agent系统,可以创建类似爬虫和聚合的“代理”。

最终建议:如何选择?

你的需求 推荐方案 优点
聚合知名平台资讯(如知乎、掘金、36氪) RSS 稳定、零反爬、无需维护
监控Twitter/Telegram/Reddit 开放API 高效、合法、数据精准
需要抓取微信公众号、封闭平台 爬虫 不推荐,除非你有明确授权或内部使用
想快速搭建、不写代码 RSSHub + 低代码 灵活、社区强大、图形化配置

推荐组合RSSHub(自建)+ Python 脚本聚合,既能覆盖绝大多数平台(利用RSSHub的通用路由),又能通过脚本进行去重、排序、存入数据库,是目前最平衡、最可持续的方案。


最后提醒:无论采用哪种方式,请务必遵守各平台的 robots.txt 和服务条款,尊重数据版权,聚合脚本应当用于个人学习、信息获取或内部系统,不要用于商业分发或侵犯他人权益。

抱歉,评论功能暂时关闭!