python新闻爬虫与文本分析核心三步:稳抓内容(requests+beautifulsoup,注意robots.txt、headers、编码与延时)、干净清洗(去广告/模板/空白符,结构化存jsON Lines或sqlite)、有效分析(TextBlob/SnowNLP情感、TF-IDF/TextRank关键词、kmeans主题聚类+词云)。

用Python做新闻爬虫加文本分析,核心就三步:稳抓内容、干净清洗、有效分析。不靠复杂框架也能跑通,关键在结构清晰、每步可验证。
一、稳定获取新闻正文的实操要点
别一上来就写全站爬取,先聚焦单个新闻页的正文提取。主流方案是 requests + BeautifulSoup,scrapy适合中大型项目但学习成本高。
- 先确认目标网站是否允许爬虫(看 robots.txt,比如 news.qq.com/robots.txt);部分媒体如新华社、人民日报官网有反爬机制,需加 headers 模拟浏览器访问
- 正文通常在
<article></article>、<div class="content"> 或带明显语义的 <code><section></section>标签下,用soup.select("article p")或soup.find("div", class_="post-body").find_all("p")更可靠,比硬写 XPath 更易维护 - 注意编码问题:中文网站多为 UTF-8,但个别老站用 GBK,
response.content.decode("gbk", errors="ignore")可兜底 - 批量时加随机延时(
time.sleep(random.uniform(1, 3))),避免被封IP;重要项目建议用代理池或 user-agent 轮换 - 用正则清理无意义字符:
re.sub(r"[ tnru3000]+", " ", text)统一空白符;删掉“本文系作者独家投稿”“转载请注明出处”这类固定模板句(可用关键词+长度阈值过滤) - 正文长度建议设上下限:太短(5000字)可能是整站转载,按需截断或打标存疑
- 结构化保存推荐 json Lines 格式(每行一个 JSON),字段至少含:
title、url、publish_time(解析后转为 ISO 格式)、source、body_clean;小规模用 SQLite,字段加索引提速查询 - 情感倾向:TextBlob(英文)或 SnowNLP(中文基础版)够用;若需更高准度,用
jieba分词 + 自建情感词典(如知网 Hownet 或台湾大学 NTUSD),加权统计正负词频 - 关键词提取:TF-IDF 配合
sklearn.feature_extraction.text.TfidfVectorizer,停用词表必用(可基于哈工大停用词表精简);也可试 TextRank(jieba.analyse.textrank),对长新闻更友好 - 主题聚类:把所有新闻向量化后,用 KMeans(K=5~10)粗分大类,再人工校验标签;配合词云(
wordcloud库)快速定位每类高频词
二、新闻文本清洗与结构化存储
爬下来的内容常混着广告、版权声明、JS脚本、重复导航栏,直接分析会严重干扰结果。
三、轻量但实用的文本分析落地方式
不用上 bert 也能看出趋势和倾向——关键是选对工具、明确目标。
立即学习“Python免费学习笔记(深入)”;
基本上就这些。重点不是堆技术,而是从一条新闻开始跑通全流程,再横向扩展网站、纵向加深分析。爬得稳、洗得净、看得懂,才是真落地。