
你好呀!如果你是一个编程小白,看到这段代码可能会觉得眼花缭乱。别担心,今天我就带你一步步拆解这个“智能新闻分析器”,让你不仅看懂它在做什么,还能感受到 Python 编程的魅力和乐趣。相信我,学完你也会想动手写一个属于自己的工具!
一、这个程序到底能做什么?
简单说,这个程序就像一个24 小时不睡觉的智能新闻助理。你只要告诉它一个关键词(比如“人工智能”),它就会:
·自动搜索:去百度、搜狗、360、Bing、腾讯、网易、新浪等几十个新闻网站,找到相关的文章链接。
·抓取内容:自动打开每一篇文章,提取标题、正文、发布时间。
·多源整合:还能从抖音热榜、微信热榜、RSS订阅(比如澎湃新闻、36氪)抓取热点话题。
·AI 深度评述:把收集到的多篇文章交给本地的大语言模型(比如 Qwen),让它写出一篇 900-1200 字的综合深度评述。
·生成爆款标题:再基于评述内容,自动生成3 条吸引眼球的标题。
·输出报告:最后把所有结果整理成一份漂亮的Markdown 报告,保存在本地。
是不是很酷?你只需要敲一行命令,剩下的全部自动化。这背后就是Python 的力量。下面我们就按模块来拆解,看看它是怎么一步步实现的。
二、代码模块逐个讲解(零基础友好)
模块1:导入工具库 —— “借别人的工具箱”
import jsonimport reimport timeimport requestsimport feedparserfrom pathlib import Pathfrom datetime import datetime, timedeltafrom urllib.parse import quoteimport argparsefrom concurrent.futures import ThreadPoolExecutor, as_completedfrom bs4 import BeautifulSoup
·大白话解释:
写Python 程序就像做手工,你不需要自己造锤子和螺丝刀,而是直接“借”别人已经做好的工具。
·requests:用来上网请求网页数据。
·feedparser:专门解析 RSS 新闻订阅。
·BeautifulSoup:像一把剪刀,可以从网页 HTML 代码中剪出我们想要的文字。
·datetime:处理时间日期,比如只取最近 3 天的新闻。
·ThreadPoolExecutor:同时干多件事,提高速度。
学习心得:Python 拥有海量的免费库,你想做什么,几乎都有现成的工具可以借用,不用重复造轮子。
模块2:配置参数 —— “告诉程序你的规矩”
REQUEST_TIMEOUT = 15USER_AGENT = 'Mozilla/5.0 ...'MAX_WORKERS = 5MIN_ARTICLE_LEN = 200
大白话解释:就像你请人帮忙,要先说清楚规则:
·REQUEST_TIMEOUT = 15:每个网页请求最多等 15 秒,超时就放弃。
·USER_AGENT:假装自己是浏览器,免得被网站拒绝。
·MAX_WORKERS = 5:同时最多让 5 个任务一起跑,快一点。
·MIN_ARTICLE_LEN = 200:文章正文少于 200 字就不要了,太水。
学习心得:编程就是把你的想法用变量和数字表达出来,程序会乖乖按照你的规矩执行。
模块3:域名白名单 —— “只认正规新闻网站”
NEWS_DOMAINS = ['news.sina.com.cn', 'news.qq.com', 'people.com.cn', ...]def is_news_url(url):for domain in NEWS_DOMAINS:if domain in url:return Truereturn False
大白话解释:网上的链接乱七八糟,很多是广告、视频、个人博客。我们只关心正规新闻网站,所以建一个“白名单”,只有链接中包含这些域名才算有效。
学习心得:编程就是不断“过滤”和“判断”,让程序学会像人一样做选择。
模块4:RSS 订阅采集器 —— “自动订阅新闻源”
class RSSCollector:def fetch_feed(self, feed_url, source_name):resp = self.session.get(feed_url, timeout=10)feed = feedparser.parse(resp.content)for entry in feed.entries:title = entry.get('title')link = entry.get('link')...
大白话解释:RSS 就像新闻网站的“广播频道”,你订阅后就能自动收到最新文章列表。
学习心得:Python 的类(class)可以把相关功能打包在一起,像一个小工厂,以后可以反复使用。
模块5:搜索引擎模块 —— “模仿你在百度搜新闻”
def baidu(self, keyword, max_results=10, days=7):url = f"https://news.baidu.com/ns?word={quote(keyword)}&time=2"resp = self.session.get(url)urls = re.findall(r'href="(https?://[^"]+)"', resp.text)valid = [u for u in urls if is_news_url(u)]return valid[:max_results]
大白话解释:你平时在百度搜新闻,浏览器会生成一个长长的网址。程序模仿你手动输入这个网址,然后从返回的网页里用正则表达式(re.findall)找出所有链接,再过滤掉非新闻链接。
学习心得:程序可以完全模拟人的操作,自动完成重复劳动。f 字符串让变量直接嵌入网址,非常方便。
模块6:抖音/微信热榜 —— “蹭热点,用免费 API”
def fetch_douyin_hotlist(max_items=10):url = "https://api.xunjinlu.fun/api/rebang/douyin.php"resp = requests.get(url, timeout=10)data = resp.json()for item in data['data']['list']:items.append({'title': item['title'], 'url': ...})
大白话解释:有些好心人提供了免费的API 接口,直接返回热榜数据(JSON 格式)。我们只需要 requests.get() 拿下来,然后像翻开字典一样取出标题和链接。
学习心得:Python 处理 JSON 超级简单,一行 resp.json() 就能把数据变成字典/列表,随取随用。
模块7:正文提取 —— “用 newspaper3k 智能扒正文”
from newspaper import Articledef extract_article(url):article = Article(url, language='zh')article.download()article.parse()return {'title': article.title, 'content': article.text}
大白话解释:网页里有广告、侧边栏、评论,我们只想要干净的正文。newspaper3k 这个库就像智能剪刀,能自动识别出文章主体。
学习心得:Python 社区里有很多大神写的专用库,你不需要懂网页解析细节,直接调用就行,这就是“站在巨人肩膀上”。
模块8:并发执行 —— “同时做多件事,省时间”
with ThreadPoolExecutor(max_workers=5) as executor:future_to_item = {executor.submit(extract_article, url): url for url in urls}for future in as_completed(future_to_item):article = future.result()
大白话解释:如果一篇文章一篇文章地处理,100 篇就要等很久。我们让程序同时开 5 个小工人,每人处理一篇,谁先做完就先拿结果。这就是并发。
学习心得:Python 的 ThreadPoolExecutor 让并发变得异常简单,几行代码就搞定。
模块9:本地 LLM 调用 —— “请 AI 写评述和标题”
class LocalLLM:def generate_synthesis(self, articles, keyword):prompt = f"请根据以下新闻写一篇900-1200字的评述...\n{combined}"resp = requests.post(f"{self.base_url}/api/generate", json={...})return resp.json()['response']
大白话解释:我们本地跑了一个大模型(比如Ollama 加载的 Qwen),通过 HTTP 接口和它对话。我们构造一段提示词(prompt),告诉它“你是评论员,根据这些新闻写评述”,它就会返回一篇完整的文章。
学习心得:用Python 调用 AI 模型就像调用一个函数,把需求说清楚,它就能干复杂的创意工作。这就是未来编程的方向——指挥 AI 为你做事。
模块10:保存报告 —— “输出漂亮的结果”
def save_report(keyword, articles, synthesis, headlines):md = f"# 综合评述:{keyword}\n\n"md += f"**参考文章数**: {len(articles)}\n\n"md += "## 爆款标题\n" + "\n".join(headlines)md += "## 评述\n" + synthesisPath('outputs').mkdir(exist_ok=True)Path(f'outputs/报告_{timestamp}.md').write_text(md, encoding='utf-8')
大白话解释:我们生成Markdown 格式的文本(一种简单的标记语言),然后用 write_text 直接写入文件。Markdown 可以轻松转换成 Word、PDF 或发布到网页。
学习心得:Python 操作文件超级简单,Path 对象让路径处理变得优雅。短短几行代码就能生成专业报告。
模块11:主流程 —— “把所有零件组装起来”
def main():parser = argparse.ArgumentParser()parser.add_argument('--keywords', required=True)args = parser.parse_args()urls = se.baidu(...) + se.sogou(...) + ...articles = concurrent_extract(urls)synthesis = llm.generate_synthesis(articles)headlines = llm.generate_headlines_from_synthesis(synthesis)save_report(...)
大白话解释:主函数就像一个总指挥,按顺序执行:搜链接→ 扒正文 → AI 写评述 → AI 拟标题 → 存报告。每个步骤都调用前面写好的功能模块,条理清晰。
学习心得:编程就像搭乐高,你把每个小积木(函数、类)做好,再用主函数把它们串起来,就能完成复杂任务。这种“分而治之”的思想是编程的核心。
三、总结与启发
你看,这个400 多行的程序,其实是由一个个简单的小功能拼起来的:
• 用 requests 拿数据
• 用 BeautifulSoup 解析 HTML
• 用 newspaper3k 提取正文
• 用 ThreadPoolExecutor 加速
• 用 feedparser 读 RSS
• 用本地 LLM 生成内容
Python 的魅力就在于此:
语法简洁:像英语一样好读,比如if url in list:
生态强大:你想得到的任何功能,几乎都有现成的库。
自动化的力量:让电脑替你做重复工作,解放你的时间。
创造力:你可以把各种库组合起来,创造出属于自己的智能工具。
如果你是零基础,完全不用担心。Python 是最适合入门的编程语言,你只要会写 print("hello world"),就已经开始了。相信我,当你第一次看到自己写的程序自动抓取新闻、自动生成文章时,那种成就感是无与伦比的。
现在,有没有冲动想学习Python 了呢?去装一个 Python,从 pip install requests 开始,试着抓取你喜欢的网站吧!你可以的!��

下载链接:
https://pan.quark.cn/s/0a35c7bb3770?pwd=Y27D
https://pan.baidu.com/s/1NBVZL2RJcKhGA3jHonFPrQ?pwd=4eeu
夜雨聆风