一、《人民日报》工具箱简介
这是一个用于人民日报PDF完整工作流程的Python工具集,支持从网站下载、文本提取到AI智能分析的全流程处理。
1.🎯 功能特性
1.1📥 PDF下载功能
- 🌐 自动从人民日报官网下载指定日期的PDF版报纸
- 📄 自动检测报纸版面数量(通常8-16版)
- 🔄 智能合并多个版面为一个完整的PDF文件
- ⏰ 支持指定日期下载和批量下载
1.2📖 PDF文本提取
- 🔍 使用PyPDF2库精确提取PDF文件中的文本内容
- 📝 处理各种PDF格式和编码
- 🛡️ 容错处理,防止提取失败影响整体流程
1.3🤖 AI智能分析
- 🧠 基于大语言模型对人民日报内容进行深度分析
- 📊 自动分类识别:重大事件、评论文章、金句典故、优秀词组
- 📋 生成结构化的Markdown格式分析报告
- 💡 支持流式输出,实时显示分析过程
2.🎯 扩展用例
- 🧠 手机端定时爬取《人民日报》,如每天早晨7:00爬取当日《人民日报》
- 📊 自动分析当日报纸精华,并存入obsidian笔记

3.🏗️ 项目结构
bash
xx/
├── rmrb_down.py # 人民日报PDF下载工具
├── readpdf.py # PDF文本提取工具
├── note_for_rmrb.py # 人民日报AI智能分析工具
├── requirements.txt # 项目依赖列表
├── README.md # 项目说明文档
└── storage/
└── downloads/
└── rmrb/ # 下载的PDF文件存储目录
└── rmrb_YYYY-MM-DD.pdf
└── 人民日报_YYYY-MM-DD.md # AI分析结果输出文件
二、安装说明
1. 环境准备
bash
# 确保Python版本 >= 3.7
python --version
2. 克隆项目
bash
git clone https://github.com/livingbody/People_Daily_Toolkit
cd People_Daily_Toolkit
3. 安装依赖
bash
pip install -r requirements.txt
依赖库列表:
requests==2.31.0- HTTP请求库,用于网页抓取beautifulsoup4==4.12.2- HTML解析库,用于网页内容解析PyPDF2==3.0.1- PDF处理库,用于文件读取和合并openai==1.58.1- OpenAI API库,用于大模型调用
python
!git clone https://github.com/livingbody/People_Daily_Toolkit
!pip install -r People_Daily_Toolkit/requirements.txt
三、使用方法
1.报纸PDF下载
python
# 本项目用于从人民日报网站下载指定日期的PDF版报纸,并将多个版面合并为一个完整的PDF文件
# 作者: livingbody
# pip install requests beautifulsoup4 PyPDF2
import os
import requests
from bs4 import BeautifulSoup
import PyPDF2
import time
from datetime import date, datetime, timedelta
import re
def get_page_count(url):
"""
获取报纸的总版面数
参数:
url: 报纸版面目录页的URL
返回值:
int: 总版面数
"""
try:
response = requests.get(url, timeout=10)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有版面链接
page_links = soup.find_all('a', href=lambda x: x and 'node_' in x and '.html' in x)
# 提取版面编号并找到最大的编号
max_page = 0
for link in page_links:
match = re.search(r'node_(\d+)\.html', link.get('href'))
if match:
page_num = int(match.group(1))
max_page = max(max_page, page_num)
return max_page
except Exception as e:
print(f"获取版面数量失败: {e}")
return 8 # 默认返回8版
def get_pdf_urls(base_url, date_str):
"""
获取所有版面的PDF文件URL
参数:
base_url: 人民日报网站的基础URL
date_str: 日期字符串,格式为'YYYY-MM-DD'
返回值:
list: PDF文件URL列表
"""
year, month, day = date_str.split('-')
# 构建版面目录页URL
catalog_url = f"{base_url}/rmrb/pc/layout/{year}{month}/{day}/node_01.html"
# 获取版面数量
page_count = get_page_count(catalog_url)
print(f"发现 {page_count} 个版面")
pdf_urls = []
# 遍历所有版面
for i in range(1, page_count + 1):
# 构建当前版面的URL
page_url = f"{base_url}/rmrb/pc/layout/{year}{month}/{day}/node_{i:02d}.html"
try:
response = requests.get(page_url, timeout=10)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
# 查找PDF链接
pdf_link = soup.find('a', href=lambda x: x and x.endswith('.pdf'))
if pdf_link:
pdf_href = pdf_link.get('href')
# 如果是相对URL,则构建绝对URL
if not pdf_href.startswith('http'):
if pdf_href.startswith('/'):
pdf_href = base_url + pdf_href
else:
pdf_href = f"{base_url}/rmrb/pc/layout/{year}{month}/{day}/{pdf_href}"
pdf_urls.append(pdf_href)
print(f"找到版面 {i} 的PDF链接: {pdf_href}")
else:
print(f"未找到版面 {i} 的PDF链接")
except Exception as e:
print(f"获取版面 {i} 的PDF链接失败: {e}")
return pdf_urls
def download_pdfs(pdf_urls, date_str):
"""
下载所有PDF文件
参数:
pdf_urls: PDF文件URL列表
date_str: 日期字符串,用于命名下载的文件
返回值:
list: 下载的PDF文件路径列表
"""
downloaded_files = []
# 创建临时目录存储下载的文件
temp_dir = f"temp_pdfs_{date_str}"
if not os.path.exists(temp_dir):
os.makedirs(temp_dir)
# 下载每个PDF文件
for i, pdf_url in enumerate(pdf_urls):
try:
# 构建保存的文件名
file_name = f"{temp_dir}/rmrb_{date_str}_{i+1:02d}.pdf"
# 下载文件
print(f"开始下载版面 {i+1} 的PDF文件...")
response = requests.get(pdf_url, timeout=30)
# 保存文件
with open(file_name, 'wb') as f:
f.write(response.content)
downloaded_files.append(file_name)
print(f"版面 {i+1} 的PDF文件下载完成: {file_name}")
# 添加下载间隔,避免请求过于频繁
time.sleep(1)
except Exception as e:
print(f"下载版面 {i+1} 的PDF文件失败: {e}")
return downloaded_files
def merge_pdfs(pdf_files, output_file):
"""
合并多个PDF文件为一个
参数:
pdf_files: 要合并的PDF文件路径列表
output_file: 合并后的输出文件路径
返回值:
bool: 合并是否成功
"""
try:
pdf_writer = PyPDF2.PdfWriter()
# 遍历每个PDF文件
for pdf_file in pdf_files:
try:
pdf_reader = PyPDF2.PdfReader(pdf_file, strict=False)
# 添加每一页到写入器
for page_num in range(len(pdf_reader.pages)):
pdf_writer.add_page(pdf_reader.pages[page_num])
except Exception as e:
print(f"读取文件 {pdf_file} 失败: {e}")
# 写入合并后的文件
with open(output_file, 'wb') as out:
pdf_writer.write(out)
print(f"PDF文件合并完成: {output_file}")
return True
except Exception as e:
print(f"PDF文件合并失败: {e}")
return False
def clean_temp_files(temp_files):
"""
清理临时文件
参数:
temp_files: 临时文件路径列表
"""
for file in temp_files:
try:
os.remove(file)
except Exception as e:
print(f"删除临时文件 {file} 失败: {e}")
# 尝试删除临时目录
if temp_files:
temp_dir = os.path.dirname(temp_files[0])
try:
os.rmdir(temp_dir)
except Exception as e:
print(f"删除临时目录 {temp_dir} 失败: {e}")
def download_rmrb_pdf(date_str=None, base_url="https://paper.people.com.cn"):
"""
下载指定日期的人民日报PDF并合并
参数:
date_str: 日期字符串,格式为'YYYY-MM-DD',默认为当天
base_url: 人民日报网站的基础URL
返回值:
str: 合并后的PDF文件路径,如果失败则返回None
"""
# 如果未指定日期,则使用当天日期
if date_str is None:
date_str = datetime.now().strftime('%Y-%m-%d')
print(f"开始下载 {date_str} 的人民日报PDF...")
# 获取所有版面的PDF链接
pdf_urls = get_pdf_urls(base_url, date_str)
if not pdf_urls:
print("未找到任何PDF链接,下载失败")
return None
# 下载PDF文件
downloaded_files = download_pdfs(pdf_urls, date_str)
if not downloaded_files:
print("所有PDF文件下载失败")
return None
# 构建输出文件名
output_file = f"rmrb_{date_str}.pdf"
# 合并PDF文件
if merge_pdfs(downloaded_files, output_file):
# 清理临时文件
clean_temp_files(downloaded_files)
print(f"人民日报 {date_str} PDF下载和合并完成!")
return output_file
else:
# 即使合并失败,也清理临时文件
clean_temp_files(downloaded_files)
return None
python
if __name__ == "__main__":
# 示例用法:下载当天的人民日报PDF
# 如果需要下载特定日期的报纸,可以传入日期参数,例如:download_rmrb_pdf('2025-09-29')
# 如果未指定日期,则使用当天日期
today=datetime.now()
download_rmrb_pdf()
bash
开始下载 2026-01-03 的人民日报PDF...
发现 8 个版面
找到版面 1 的PDF链接: https://paper.people.com.cn/rmrb/pc/layout/202601/03/../../../attachement/202601/03/a34b8d91-e465-4b84-9c08-c07900f5d536.pdf
找到版面 2 的PDF链接: https://paper.people.com.cn/rmrb/pc/layout/202601/03/../../../attachement/202601/03/dee045f0-a680-450a-933d-03b6b038ee3d.pdf
找到版面 3 的PDF链接: https://paper.people.com.cn/rmrb/pc/layout/202601/03/../../../attachement/202601/03/0c5046c0-6919-4194-931b-145f8e7fa90f.pdf
找到版面 4 的PDF链接: https://paper.people.com.cn/rmrb/pc/layout/202601/03/../../../attachement/202601/03/1c61519d-506a-4c83-925d-b9c79e7609f7.pdf
找到版面 5 的PDF链接: https://paper.people.com.cn/rmrb/pc/layout/202601/03/../../../attachement/202601/03/7a2392d1-d4fb-4b9d-93e3-28ed039d1de3.pdf
找到版面 6 的PDF链接: https://paper.people.com.cn/rmrb/pc/layout/202601/03/../../../attachement/202601/03/32f4a6e9-3959-411a-bcaf-ebf638a7239c.pdf
找到版面 7 的PDF链接: https://paper.people.com.cn/rmrb/pc/layout/202601/03/../../../attachement/202601/03/a864bc77-c935-4d50-b3ce-5e9eb8ba2fc2.pdf
找到版面 8 的PDF链接: https://paper.people.com.cn/rmrb/pc/layout/202601/03/../../../attachement/202601/03/1c86d66b-66c3-4633-9b78-0c85e34d23a8.pdf
开始下载版面 1 的PDF文件...
版面 1 的PDF文件下载完成: temp_pdfs_2026-01-03/rmrb_2026-01-03_01.pdf
开始下载版面 2 的PDF文件...
版面 2 的PDF文件下载完成: temp_pdfs_2026-01-03/rmrb_2026-01-03_02.pdf
开始下载版面 3 的PDF文件...
版面 3 的PDF文件下载完成: temp_pdfs_2026-01-03/rmrb_2026-01-03_03.pdf
开始下载版面 4 的PDF文件...
版面 4 的PDF文件下载完成: temp_pdfs_2026-01-03/rmrb_2026-01-03_04.pdf
开始下载版面 5 的PDF文件...
版面 5 的PDF文件下载完成: temp_pdfs_2026-01-03/rmrb_2026-01-03_05.pdf
开始下载版面 6 的PDF文件...
版面 6 的PDF文件下载完成: temp_pdfs_2026-01-03/rmrb_2026-01-03_06.pdf
开始下载版面 7 的PDF文件...
版面 7 的PDF文件下载完成: temp_pdfs_2026-01-03/rmrb_2026-01-03_07.pdf
开始下载版面 8 的PDF文件...
版面 8 的PDF文件下载完成: temp_pdfs_2026-01-03/rmrb_2026-01-03_08.pdf
PDF文件合并完成: rmrb_2026-01-03.pdf
人民日报 2026-01-03 PDF下载和合并完成!
根据日志可见:
- 按照版面依次下载pdf文件
- 合并所有版面成报纸 另外保存目录等自己可以调整。
2.使用ERNIE大模型对《人民日报》进行智能分析
2.1 读取PDF
从PDF文件中提取文本内容, 使用PyPDF2库读取PDF文件,提取所有页面的文本内容,各页面文本用单换行符连接。
2.2 使用ERNIE大语言模型对文本内容进行智能分析
主要完成下列任务:
- 1.报纸中出现的重大事件;
- 2.评论员文章;
- 3.金句、典故、古语;
- 4.优秀词组、新词。
python
# -*- coding: utf-8 -*-
"""
人民日报PDF智能分析工具
=========================
这个模块提供了对人民日报PDF文件的智能分析功能,能够:
1. 自动提取PDF文本内容
2. 使用大语言模型进行智能分析
3. 生成结构化的分析报告
主要功能:
- 提取人民日报PDF文本
- AI智能分析识别重大事件、评论文章、金句典故、优秀词组
- 生成Markdown格式的分析报告
- 自动按日期命名输出文件
依赖库:
- PyPDF2: PDF文件读取
- OpenAI: 大模型API调用
- datetime: 日期时间处理
"""
from datetime import datetime
from openai import OpenAI
from PyPDF2 import PdfReader
# 获取当前日期字符串,用于文件名命名
date_str = datetime.now().strftime('%Y-%m-%d')
def read_pdf(pdf_path):
"""
从PDF文件中提取文本内容
使用PyPDF2库读取PDF文件,提取所有页面的文本内容,
各页面文本用单换行符连接。
Args:
pdf_path (str): PDF文件的完整路径
Returns:
str: 从PDF中提取的文本内容,各页面之间用换行符分隔
Note:
这个函数与readpdf.py中的read_pdf函数类似,但连接符不同
这里使用单换行符,适合后续的AI分析处理
"""
# 创建PDF阅读器对象并读取文件
reader = PdfReader(pdf_path)
# 提取所有页面的文本内容
# page.extract_text() 可能返回None,使用or ""处理空页面
# 各页面文本用换行符连接,保持一定分隔但比双换行符更紧凑
return "\n".join(page.extract_text() or "" for page in reader.pages)
def extract_info(content):
"""
使用大语言模型对文本内容进行智能分析
该函数调用百度AI Studio的ernie-4.5-turbo-vl模型,
对输入的文本内容进行结构化分析,识别和分类各种信息。
Args:
content (str): 待分析的文本内容(通常是从PDF提取的报纸内容)
Returns:
str: AI分析生成的结构化文本内容
Note:
- 使用流式输出,实时显示AI思考过程和分析结果
- 分析结果包含重大事件、评论文章、金句典故、优秀词组四个维度
- 模型配置为低温度(0.2)以确保输出稳定性
"""
# 初始化OpenAI客户端
# 注意:API密钥应从环境变量或配置文件获取,避免硬编码
client = OpenAI(
# API密钥配置 - 生产环境中应使用环境变量xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
api_key="生产环境中应使用环境变量xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
# 百度AI Studio大模型API服务地址
base_url="https://aistudio.baidu.com/llm/lmapi/v3",
)
# 创建聊天完成请求
chat_completion = client.chat.completions.create(
# 使用ernie-4.5-turbo-vl模型进行多模态分析
model="ernie-4.5-turbo-vl",
# 构建对话消息
messages=[
{
"role": "system",
"content": (
"该内容是报纸pdf识别的,内容连续性可能有问题,请你理顺后,"
"然后详尽完成下列任务,要详细,尽可能多:"
"1.报纸中出现的重大事件;"
"2.评论员文章;"
"3.金句、典故、古语;"
"4.优秀词组、新词。"
),
},
{"role": "user", "content": content},
],
# 启用流式输出,实时显示结果
stream=True,
# 额外的模型参数配置
extra_body={
"penalty_score": 1, # 重复惩罚分数,控制内容重复度
"enable_thinking": True # 启用思考模式,提高分析质量
},
# 模型生成参数
max_completion_tokens=12000, # 最大输出token数,确保详细分析
temperature=0.2, # 温度参数,低温度保证输出稳定性
top_p=0.8, # 核采样参数
frequency_penalty=0, # 频率惩罚,避免重复内容
presence_penalty=0 # 存在惩罚,鼓励新话题
)
# 处理流式输出
mycontent = ""
for chunk in chat_completion:
# 检查是否有有效的选择结果
if not chunk.choices or len(chunk.choices) == 0:
continue
choice = chunk.choices[0]
# 处理AI思考过程内容(如果启用思考模式)
if hasattr(choice.delta, "reasoning_content") and choice.delta.reasoning_content:
# 实时显示AI的思考过程
print(choice.delta.reasoning_content, end="", flush=True)
# 处理实际的分析内容
elif hasattr(choice.delta, "content") and choice.delta.content:
# 实时显示分析结果
print(choice.delta.content, end="", flush=True)
# 累积完整内容用于返回
mycontent = mycontent + choice.delta.content
# 返回完整的分析结果
return mycontent
def main():
"""
主函数 - 程序执行入口
执行完整的PDF分析流程:
1. 构建当日人民日报PDF文件名
2. 读取PDF文本内容
3. 使用AI进行智能分析
4. 保存分析结果到Markdown文件
"""
try:
# 构建当日人民日报PDF文件名 (格式: rmrb_YYYY-MM-DD.pdf)
rmrb_pdf_file = f"rmrb_{date_str}.pdf"
print(f"正在读取PDF文件: {rmrb_pdf_file}")
# 提取PDF文本内容
content = read_pdf(rmrb_pdf_file)
print(f"PDF文本提取完成,内容长度: {len(content)} 字符")
# 使用AI进行智能分析
print("\n开始AI分析...")
markdown_note = extract_info(content)
print("\nAI分析完成")
# 重新获取日期字符串(确保文件名日期准确)
current_date = datetime.now().strftime("%Y-%m-%d")
output_filename = f"人民日报_{current_date}.md"
# 保存分析结果到Markdown文件
with open(output_filename, "w", encoding="utf-8") as file:
print(markdown_note, file=file)
print(f"\n分析结果已保存到: {output_filename}")
except FileNotFoundError:
print(f"错误: 找不到文件 '{rmrb_pdf_file}'")
print("请确保当日的人民日报PDF文件存在且命名格式正确")
except Exception as e:
print(f"处理过程中发生错误: {str(e)}")
print("请检查网络连接和API配置")
python
#开始对报纸内容分析
if __name__ == "__main__":
main()
四、报纸摘要示例
一、报纸中出现的重大事件
-
经济数据发布
- 2025年我国全年电影票房达518.32亿元,同比增长21.95%,国产影片占比79.67%。
- 元旦假期首日(2026年1月1日)全国跨区域人员流动量超2亿人次,同比增长20.3%。
-
科技与能源成就
- "华龙一号"漳州核电2号机组投入商业运行,标志漳州核电一期工程全面投产,单台机组年发电量约100亿千瓦时。
- "深海一号"气田2025年油气总产量突破450万吨,与陆地中型油田规模相当。
-
政策调整与经济措施
- 国家发展改革委优化"两新"政策(设备更新与消费品以旧换新),扩大资金支持范围,降低企业申报门槛。
- 2026年提前批"两重"建设项目清单下达,约2950亿元投资聚焦城市地下管网、高标准农田等领域。
-
国际合作与外交
- 多国重申坚持一个中国原则,反对干涉中国内政,包括巴基斯坦、孟加拉国、吉布提等。
- 中国助力非洲数字化转型,如承建博茨瓦纳国家数据中心、助力肯尼亚电商发展(Kilimall平台)等。
-
社会民生与乡村振兴
- 吉林省镇赉县创业村通过盐碱地改良实现水稻丰收,打造"镇赉大米"品牌,村集体收入突破50万元。
- 浙江舟山实施"小岛迁、大岛建"工程,改善海岛老人养老条件,同时盘活小岛资源发展特色产业。
-
文化与法治建设
- 中国法治论坛聚焦"十五五"法治保障,强调构建法学自主知识体系,推动法治赋能高质量发展。
- 《哪吒之魔童闹海》票房破154亿元,推动中国电影工业水平提升。
二、评论员文章
-
《继续回答好延安"窑洞之问"》
- 核心观点:坚持自我革命,保持党同人民血肉联系,通过从严治党净化政治生态,确保"十五五"良好开局。
- 关键论据:从"让人民监督政府"到"自我革命",历史周期率的两个答案彰显党与人民风雨同舟。
-
《优化实施"两新"政策,推动高质量发展》
- 核心观点:通过资金分配优化、监管强化和范围拓展,提升政策惠及面,支持企业设备更新与消费升级。
- 关键论据:2025年消费品以旧换新暴露问题,2026年针对性优化,如增加老旧小区电梯改造、商业综合体设备更新等。
-
《中国助力非洲数字化转型》
- 核心观点:通过数字基建、电商培育、人才培训,中国助力非洲弥合数字鸿沟,推动可持续发展。
- 关键论据:博茨瓦纳数据中心、肯尼亚Kilimall平台、卢旺达鲁班工坊等案例体现中非合作成果。
三、金句、典故、古语
-
领导人金句
- "党兴方能国强。"(新年贺词)
- "我国成为创新力上升最快的经济体之一。"(2026年新年贺词)
- "信心,来自经济实力的拾级而上。"(新年贺词解读)
-
典故与古语
- "民惟邦本"(《尚书》),用于阐释"以人民为中心"的治理理念。
- "四水归堂"(传统建筑智慧),象征民居文化中"聚财聚气"的生态设计。
- "逐梦星辰大海",形容科技发展的远大志向。
-
文化引用
- 侗族款约"不会唱歌难娶亲",体现非遗文化传承与社区治理结合。
- "风物长宜放眼量",用于鼓励长期主义发展观。
四、优秀词组、新词
-
政策术语
- "两新"政策:设备更新与消费品以旧换新。
- "两重"建设:重大战略、重点领域安全能力建设。
- "新质生产力":以创新驱动的高质量发展动能。
-
经济与科技新词
- "地理信息产业":自动驾驶地图标准体系、实景三维中国建设。
- "同一起跑线":形容未来产业布局的公平竞争环境。
-
社会民生词汇
- "小岛迁、大岛建":海岛乡村振兴模式。
- "盐碱地上创业":通过科技改良实现农业突破。
-
文化与国际传播
- "文化出海'新三样'":网文、网剧、网游成为文化输出新渠道。
- "最佳旅游乡村":黄岗村等通过文旅融合实现乡村振兴。
-
法治与治理概念
- "全国统一大市场":破除地方壁垒,促进要素自由流动。
- "法治赋能高质量发展":通过立法保障经济转型。
以上内容基于报纸PDF识别材料整理,涵盖时政、经济、科技、文化等多领域,体现中国在政策、创新、民生及国际合作中的动态。