本项目是一个用于爬取中央电视台新闻联播内容,并提供API接口的后端服务系统。该系统能够定时爬取新闻联播内容,存储到SQLite数据库中,并通过RESTful API提供数据查询服务。
WeChatApp_CCTV_NEWS/
├── backend/ # 后端服务目录
│ ├── backend.py # 后端API服务
│ ├── news_to_sqlite.py # 新闻爬虫脚本
│ ├── batch_run.py # 批量爬取脚本
│ ├── scheduled_spider.py # 定时爬虫脚本
│ ├── config.yaml # 配置文件
│ ├── requirements.txt # 依赖列表
│ ├── install_dependencies.py # 依赖安装脚本
│ └── news.db # SQLite数据库文件
├── pages/ # 微信小程序页面
│ ├── detail/ # 新闻详情页
│ └── index/ # 首页
├── app.js # 微信小程序入口
├── app.json # 微信小程序配置
├── app.wxss # 微信小程序样式
└── README.md # 项目说明文档
- 提供RESTful API接口
- 支持查询指定日期的新闻列表
- 支持查询单条新闻的详细内容
- 支持CORS跨域请求
- 爬取指定日期的新闻联播内容
- 解析新闻标题、链接和详细内容
- 将爬取结果存储到SQLite数据库
- 支持批量爬取多个日期的新闻
- 自动定时执行新闻爬取
- 支持自定义执行频率
- 支持日志记录
- 通过YAML配置文件管理所有参数
- 支持动态调整配置
- 无需修改代码即可更换服务器环境
- Python: 3.8+
- Web框架: Flask 2.0+
- HTTP客户端: Requests 2.25+
- HTML解析: BeautifulSoup4 4.9+
- 数据库: SQLite
- 配置管理: PyYAML 6.0+
- 定时任务: Schedule 1.1+
- 跨域支持: Flask-CORS 3.0+
- Python 3.8 或更高版本
- pip 19.0 或更高版本
- 支持的操作系统: Windows, Linux, macOS
cd backend
python install_dependencies.py- 安装Python依赖
cd backend
pip install -r requirements.txt- (可选)安装系统依赖(Linux系统)
sudo apt update
sudo apt install -y build-essential python3-venv libyaml-dev修改 backend/config.yaml 文件,根据实际需求调整配置:
backend:
host: "0.0.0.0" # 服务器IP,0.0.0.0表示监听所有网卡
port: 5001 # 端口号
debug: true # 调试模式,生产环境建议设置为falsedatabase:
path: "news.db" # 数据库文件路径spider:
backend_url: "http://localhost:5001" # 后端服务URL
request_timeout: 10 # 请求超时时间(秒)
max_retries: 5 # 最大重试次数
request_delay: 1.0 # 请求延迟(秒)batch:
python_path: "python.exe" # Python解释器路径
main_script: "news_to_sqlite.py" # 主爬虫脚本路径
default_start_date: "2022-01-01" # 默认开始日期cd backend
python backend.pycd backend
python news_to_sqlite.py --date 2022-01-01cd backend
python batch_run.py --start 2022-01-01 --end 2022-01-31cd backend
python scheduled_spider.pyURL: /db/news_list?date=YYYY-MM-DD
方法: GET
参数:
date: 日期,格式为YYYY-MM-DD
返回示例:
{
"code": 200,
"message": "success",
"data": {
"date": "2022-01-01",
"items": [
{
"id": 1,
"date": "2022-01-01",
"title": "新闻标题1",
"item_number": "1/10",
"link": "http://example.com/news1"
},
// 更多新闻条目...
]
}
}URL: /db/news_detail?id=1
方法: GET
参数:
id: 新闻ID
返回示例:
{
"code": 200,
"message": "success",
"data": {
"id": 1,
"date": "2022-01-01",
"title": "新闻标题1",
"content": "新闻详细内容...",
"item_number": "1/10"
}
}- 创建虚拟环境
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt- 配置系统服务
创建 /etc/systemd/system/backend.service 文件:
[Unit]
Description=CCTV News Backend Service
After=network.target
[Service]
User=ubuntu # 替换为您的用户名
WorkingDirectory=/path/to/your/project/backend
ExecStart=/path/to/your/project/backend/venv/bin/python backend.py
Restart=always
[Install]
WantedBy=multi-user.target- 启用服务
sudo systemctl daemon-reload
sudo systemctl enable backend.service
sudo systemctl start backend.service- 查看服务状态
sudo systemctl status backend.service-
Q: 爬虫运行时提示 "加载配置文件失败" A: 检查
config.yaml文件是否存在,格式是否正确 -
Q: 后端服务无法启动 A: 检查端口是否被占用,或是否有足够的权限
-
Q: API请求返回404 A: 检查请求路径是否正确,或后端服务是否正常运行
-
Q: 爬取的数据为空 A: 检查网络连接,或新闻网站结构是否有变化
-
Q: 数据库查询速度慢 A: 检查数据库索引是否创建,或考虑优化查询语句
backend.py: 主要负责API服务,使用Flask框架实现news_to_sqlite.py: 主要负责新闻爬取和数据库存储batch_run.py: 主要负责批量执行爬虫任务scheduled_spider.py: 主要负责定时执行爬虫任务
- 定时爬虫日志:
scheduled_spider.log - 新闻爬虫日志:
news_to_sqlite.log - 批量运行日志:
batch_run.log
新闻表结构: news_联播
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| date | TEXT | 新闻日期,格式YYYY-MM-DD |
| title | TEXT | 新闻标题 |
| link | TEXT | 新闻链接,唯一约束 |
| item_number | TEXT | 新闻条目编号,格式如"1/10" |
| total_items | INTEGER | 当日新闻总条数 |
| content | TEXT | 新闻内容 |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
本项目采用 MIT 许可证,详见 LICENSE 文件。
如有问题或建议,欢迎通过以下方式联系:
- Email: your-email@example.com
- 初始版本发布
- 实现新闻联播内容爬取
- 实现RESTful API服务
- 实现定时爬取功能
- 支持配置文件管理
温馨提示: 本项目仅用于学习和研究目的,请勿用于商业用途。请遵守相关法律法规,合理使用爬虫技术。