用脚本定时爬取新闻并推送到手机的全攻略
目录导读
- 为什么需要定时爬取新闻?
- 核心工具与架构拆解
- 三步搭建新闻抓取脚本(Python实战)
- 如何将新闻推送到手机?
- 常见问题与避坑指南
- 自动化让你不再错过关键信息
为什么需要定时爬取新闻?
在信息爆炸的时代,手动刷新网页查看特定新闻如同大海捞针,无论是追踪行业动态、监控竞品信息,还是关注政策变化,定时爬取+手机推送都能帮你实现“信息主动触达”。

问答环节
问:直接用RSS推送不好吗?
答:许多网站已关闭RSS,且RSS无法抓取登录后内容、动态加载页或需要解析的复杂数据,脚本爬取可以自定义规则,从任意页面提取标题、时间、甚至全文。
核心工具与架构拆解
- 脚本语言:Python(推荐requests + BeautifulSoup / lxml)
- 定时任务:Linux用crontab,Windows用任务计划程序,或者全平台用APScheduler库。
- 推送渠道:
- Server酱(微信推送)
- Bark(iOS通知)
- Pushover(跨平台)
- 企业微信Bot(适合团队)
- 自建Telegram Bot
架构逻辑:
目标网站 → 定时触发 → Python请求HTML/API → 解析数据 → 去重/过滤 → 格式化 → 调用推送接口 → 手机弹出通知
三步搭建新闻抓取脚本(Python实战)
第一步:获取目标列表并测试请求
import requests
from bs4 import BeautifulSoup
url = "https://news.ycombinator.com/"
headers = {"User-Agent": "Mozilla/5.0"} # 伪装浏览器
response = requests.get(url, headers=headers, timeout=10)
soup = BeautifulSoup(response.text, "html.parser")= soup.select_one(".titleline a").text
print(f"最新新闻标题: {title}")
避坑提示:
- 如果网页使用JavaScript渲染(如Vue/React),需改用Selenium或Playwright。
- 添加随机延时(
time.sleep(2 + random.random()))避免被封IP。
第二步:设计去重与推送逻辑
import sqlite3, json
# 用轻量级SQLite存储已推送新闻的MD5
conn = sqlite3.connect("news.db")
conn.execute("CREATE TABLE IF NOT EXISTS history (hash TEXT PRIMARY KEY)")
class NewsPusher:
def __init__(self, push_url):
self.push_url = push_url
def push_to_wechat(self, title, content):
data = {"title": title, "desp": content}
requests.post(self.push_url, data=data)
pusher = NewsPusher("https://sctapi.ftqq.com/YOUR_KEY.send")
第三步:设置定时调度(以APScheduler为例)
from apscheduler.schedulers.blocking import BlockingScheduler
def crawl_job():
# 执行抓取、去重、推送
pass
scheduler = BlockingScheduler()
scheduler.add_job(crawl_job, "interval", hours=1) # 每小时一次
scheduler.start()
如何将新闻推送到手机?
| 推送方式 | 优点 | 配置方法 |
|---|---|---|
| Server酱 | 免费、微信直达 | 注册后获取Key,POST请求发送标题+内容 |
| Bark | iOS原生通知、自定义分组 | iOS安装App,拼接URL即可 |
| Pushover | 跨平台、支持紧急级别 | 需一次性购买(约5美元),但稳定可靠 |
| 企业微信Bot | 无需安装额外App | 创建一个群聊Bot,Webhook推送 |
| Telegram Bot | 高度自定义、支持Markdown | 通过BotFather创建,用Python-Telegram-Bot库 |
推荐方案:
- 个人用户:Server酱(零成本,微信原生提醒)
- 技术爱好者:自建Telegram Bot(可控性强)
常见问题与避坑指南
Q1:脚本跑着跑着就不推送了?
- 检查IP是否被网站ban——使用代理池(付费或免费如Scrapy-Proxy-Pool)
- 检查推送接口是否限流(如Server酱每日免费额度为5条/分钟)
Q2:新闻重复推送怎么办?
- 计算文章URL或标题的MD5,存入Redis或SQLite进行去重。
Q3:如何保证脚本24小时运行?
- 部署到云服务器(最低配置即可,如腾讯云轻量应用服务器)
- 或用GitHub Actions(利用免费额度定时触发)
Q4:推送消息太长被截断? 长度(如取前200字符),附上原文链接。
自动化让你不再错过关键信息
通过 Python脚本 + 定时调度 + 手机推送,你可以将互联网上的任意动态变为私人定制信息流,无论你是技术人员还是运营人员,掌握这套方案后,不再需要每天手动翻几十个网站——让机器人替你做。
下一步行动建议:
- 先调试单个新闻页面抓取成功
- 加上去重与推送模块
- 部署到云服务器并监控日志
当第一条新闻推送到你手机时,那种“信息主动来找你”的掌控感,会让你觉得一切折腾都值得。