# 基于Python实现的新闻网络爬虫程序
# 1、简介
## 1.1 引用术语与缩写解释
| 缩写、术语 | 解 释 |
| ----------------- | --------------------------- |
| Python | 一种简洁而强大的解释型脚本语言 |
| pyodbc | Python下的ODBC数据库访问组件 |
| SQLAlchemy | Python下的ORM数据访问组件 |
| pywin32 | Python下的Win32接口访问组件 |
| requests | Python下的Web访问组件 |
| Pillow | Python下的图像处理组件 |
| 解释型语言 | 无需编译源码可敏捷部署并执行的语言 |
| IOC | 控制反转,运行时可由数据反向干涉程序执行逻辑的设计模式 |
| RegularExpression | 正则表达式,查找和替换文本模式的简洁而灵活的表示法 |
| XML | 扩展标记语言,用于配置及数据交互 |
## 1.2 概要
本文档针对以下三个方面进行了详细说明:
- **架构说明**,对新闻网络爬虫的核心架构进行描述,供开发人员在开发或升级应用时参考
- **部署说明**,对新闻网络爬虫的部署步骤进行描述,供部署人员进行应用部署或升级时参考
- **扩展说明**,对新闻网络爬虫的扩展模式进行描述,供开发人员扩展爬虫功能时参考
## 1.3 应用设计目标
- **易于扩展**
- **易用**
- **易于维护**
为了达成这些设计目标我们采用了以下设计机制:
- **易于扩展**
- 使用解释型、面向对象的Python语言实现程序逻辑:解释型语言易于扩展部署,结合抓取模块的IOC机制,更新升级时无需停机;面向对象易于代码复用,创建新爬虫模块时仅需少量重载代码修改
- 控制流程IOC化,利用XML配置文件,可动态增减爬虫任务、控制爬虫任务启动条件、更改爬虫规则以及爬虫逻辑
- **易用**
- 服务化,爬虫任务被封装为Windows 服务,可便捷地启动与停止,于后台执行长期运行
- **易于维护**
- 编程语言简洁,缩进式风格减少了语法性代码,动态数据类型减少了声明性代码,函数式编程特性减少了重复性函数代码,友好而功能强大的标准库与外部组件也减少逻辑复杂性
- 数据访问层模型化:使用SQLAlchemy组件,对数据访问进行对象化建模,屏蔽数据访问细节,如SQL,数据模型易于维护
# 2、架构说明
新闻网络爬虫程序主题为一系列python脚本,通过文件夹进行模块隔离,基于命名约定进行动态逻辑加载,根目录为ArticleSpider。
整体框架如下:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/785b6c430ca682cdb2ab35214550864e.writebug)
- **SpiderService.py**:服务入口模块,用以处理Windows服务Article Spider Service的安装、卸载、启动、停止与重启
- **SpiderTask.py**:任务管理模块,负责加载控制规则配置、安排爬虫任务计划、组合爬虫任务子逻辑
- **ArticleStorer.py**:文章转存模块,包含数据库访问、图片转存与切图、队列消息发送功能
- **RuleReader.py**:规则读取模块,用于读取爬虫规则,辅助IOC机制
- **Spider**:爬虫逻辑模块,核心模块群,可根据需要添加新爬虫模板,爬虫模板可继承,基模块为Spider.py,多个相似爬虫可根据规则设置复用同一个爬虫模板
- **Model**:数据模型模块,维护爬虫相关ORM数据模型,由上下文管理层、数据模型层与事务逻辑层组成
- **Message**:消息处理模块,主要负责封装与发送队列消息
- **SpiderRule.xml**:爬虫规则配置,XML格式元数据
- **Temp**:缓存目录,用以缓存转存完成前的中间文件,如下载图片
- **Log**:日志目录,用以保存日志,采用循环日志模式
- **ServiceCommand.txt**:服务入口命令,用于参考的爬虫服务基本人机交互命令
- **SpiderTest.py**:爬虫测试模块,用于测试的相关脚本
## 2.1 模块说明
### 2.1.1 服务入口层 SpiderService.py
#### 2.1.1.1 SpiderService
- **win32serviceutil.ServiceFramework**:服务基类,引入自pywin32组件,用以将Python程序封装位Windows服务
- **SvcDoRun**:服务启动入口,重载基类方法,用以开启SpiderTask任务管理线程,阻塞等待任务结束事件
- **SvcStop**:服务终止入口,重载基类方法,用以终止SpiderTask任务管理线程,发起任务结束事件
#### 2.1.1.2 ServiceCommand
- **python SpiderService.py install**:爬虫服务安装,必须指令,用以注册Windows服务,安装成功后可直接于Windows服务管理器中进行服务启动、停止等管理操作
- **python SpiderService.py install --startup auto**:自启动爬虫服务安装
- **python SpiderService.py start**:启动爬虫服务,服务安装后有效
- **python SpiderService.py restart**:重启爬虫服务,服务启动后有效
- **python SpiderService.py stop**:停止爬虫服务,服务启动后有效
- **python SpiderService.py remove**:删除/卸载爬虫服务,服务安装后有效
### 2.1.2 任务管理层 SpiderTask.py
#### 2.1.2.1 SpiderTask
- **threading.Thread**:线程管理基类,引入自python标准库,用以将主任务进行线程化封装
- **\_\_init\_\_**:初始化方法,进行一系列任务初始化操作,如线程初始化、日志初始化、调度初始化、存储初始化等操作
- **ScheduleTask**:任务调度方法,读取爬虫规则,根据设置生成爬虫调度计划
- **RunSpiderByRule**:爬虫驱动方法,按照给定规则,驱动对应爬虫开启任务,核心步骤为,爬虫选用—文章抓取—图片转存—文章入库—后续处理(如压图与消息通知)
- **run**:任务子线程启动入口,重载基类方法,以日为周期进行调度-执行-休眠循环,苏醒后调度爬虫任务—按照调度计划处理任务(执行或等待)—计划完成后休眠至下一周期苏醒
- **StopTask**:任务终止方法,当前任务完成后终止任务计划,非强行中断任务子线程,若要强行中断,可直接结束主线程,任务子线程将自动中断
### 2.1.3 规则读取层 RuleReader.py
#### 2.1.3.1 RuleReader
- **\_\_init\_\_**:初始化方法,确定规则读取模式(目前仅支持XML模式),模式有效时进行初始规则读取
- **FreshRules**:规则刷新方法,读取最新规则,默认以XML格式读取规则,若要采用其他方法(如数据库读取、Json接口读取等),可继承该基类后进行重载扩展
#### 2.1.3.2 GetRuleFromNode
功能性函数,从XML节点中提取爬虫规则字典,属性及简单子节点直接提取入本级字典,复杂子节点递归提取为子级字典后加入本级字典。
#### 2.1.3.3 PrintNode
调试用函数,用于打印XML节点数据,采用前序遍历法。
#### 2.1.3.4 SpiderRule
爬虫规则字典(dict类型),存储爬虫规则参数,以福州旅游网爬虫规则为例:
- **name**:规则名称,通常以爬取来源站命名,如福州旅游网
- **sourceId**: 来源标识,参照文章来源枚举值,默认为0
- **rule**:子级明细规则字典
- **url**:来源Url,明细规则,如:http://lyj.fuzhou.gov.cn/lyjzwgk/lydt/index.htm
- **reAbstract**:文章摘要正则表达式,明细规则,扫描文章清单时使用,如:
```html
<li>.+?<span>\[(.+?)\].+?href="(.+?)".+?>(.+?)</a>.+?</li>
```
- **reArticle**:文章正文正则表达式,明细规则,扫描文章正文时使用,如:
```html
<div class="content-boxtext">(.+?)</div>\s*<div class="content-boxbottom">
```
- **reImage**:文章图片正则表达式,明细规则
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
SpiderService.py:服务入口模块,用以处理Windows服务Article Spider Service的安装、卸载、启动、停止与重启 SpiderTask.py:任务管理模块,负责加载控制规则配置、安排爬虫任务计划、组合爬虫任务子逻辑 ArticleStorer.py:文章转存模块,包含数据库访问、图片转存与切图、队列消息发送功能 RuleReader.py:规则读取模块,用于读取爬虫规则,辅助IOC机制 Spider:爬虫逻辑模块,核心模块群,可根据需要添加新爬虫模板,爬虫模板可继承,基模块为Spider.py,多个相似爬虫可根据规则设置复用同一个爬虫模板 Model:数据模型模块,维护爬虫相关ORM数据模型,由上下文管理层、数据模型层与事务逻辑层组成 Message:消息处理模块,主要负责封装与发送队列消息 SpiderRule.xml:爬虫规则配置,XML格式元数据 Temp:缓存目录,用以缓存转存完成前的中间文件,如下载图片 Log:日志目录,用以保存日志,采用循环日志模式 ServiceCommand.txt:服务入口命令,用于参考的爬虫服
资源推荐
资源详情
资源评论
收起资源包目录
爬虫程序.rar爬虫程序.rar爬虫程序.rar (114个子文件)
设计报告.docx 82KB
.gitignore 675B
LICENSE 1KB
README.md 35KB
Spider.py 9KB
ArticleStorer.py 5KB
SpiderTest.py 4KB
SpiderTask.py 4KB
SpiderData.py 4KB
FuZhouSpiderBackup.py 3KB
BeiJingQianLongSpider.py 3KB
LaSaXiZangTourSpider.py 2KB
MuDanJiangHeiLongJiangGovSpider.py 2KB
SpiderMessageQueue.py 2KB
BeiJingVisitSpider.py 2KB
FuZhouTourSpider.py 2KB
GuiYangCoolSpider.py 2KB
TailandKunMingSpider.py 2KB
ChongQingHuaLongSpider.py 2KB
SuZhouMingChengSpider.py 2KB
XiangGangShangSpider.py 2KB
TailandSohuSpider.py 2KB
DaoChengYaDingGovSpider.py 2KB
SuZhouTourSpider.py 2KB
HuangShanGovSpider.py 2KB
ChongQingGovSpider.py 2KB
PhuketXuTuTourSpider.py 2KB
ChongQingTencentSpider.py 2KB
TengChongBaoShanLifeSpider.py 2KB
HaErBinHeiLongJiangSpider.py 2KB
GuiYangWangSpider.py 2KB
HaiKouTourSpider.py 2KB
ChangBaiShanTravelSpider.py 2KB
HangZhouGotoSpider.py 2KB
BeiJingCnGovSpider.py 2KB
AoMenXinHuaNetSpider.py 2KB
TailandCncnSpider.py 2KB
QuanZhouTourSpider.py 2KB
RongShuiSpider.py 2KB
XiShuangBanNaTravelSpider.py 2KB
ChongQingChinaNewsSpider.py 2KB
JiLinProGovSpider.py 2KB
RuleReader.py 2KB
XiaMenSpider.py 2KB
HaErBin17uSpider.py 2KB
HaiKouHaiNanGovSpider.py 2KB
KunMingTourSpider.py 2KB
FuZhouSpider.py 2KB
KunMingInfoHarbourSpider.py 2KB
QianDongNanNewsSpider.py 2KB
MuDanJiangGovSpider.py 2KB
QianDongNanZhenYuanSpider.py 2KB
JiLinGovSpider.py 2KB
MalaysiaSpider.py 2KB
FuZhouYiLongSpider.py 2KB
LaSaTourSpider.py 2KB
TianJinGovSpider.py 2KB
HaErBinDongBeiSpider.py 2KB
NanJingLiuHeGovSpider.py 1KB
ShangQiuHeNanSpider.py 1KB
NanJingGovSpider.py 1KB
LiJiangCnCnSpider.py 1KB
SanYaTourAssSpider.py 1KB
BeiHaiTourSpider.py 1KB
DunHuaSpider.py 1KB
TengChongXinWenSpider.py 1KB
TaiNingFuJianSpider.py 1KB
BenXiSpider.py 1KB
BeiHaiGovSpider.py 1KB
AoMenCncnSpider.py 1KB
ShangHaiCthySpider.py 1KB
ShangHaiLywGovSpider.py 1KB
HuangShanNewsSpider.py 1KB
DaLiTravelSpider.py 1KB
HangZhouXiHuSpider.py 1KB
QianDongNanKaiLiSpider.py 1KB
ChengDuLYMHSpider.py 1KB
DaoChengLeYiChengSpider.py 1KB
XiaMenTravelSpider.py 1KB
ZhouShanShengSiSpider.py 1KB
LiJiangYunNanSpider.py 1KB
HuangShanXiXianSpider.py 1KB
DaLiTourSpider.py 1KB
XiShuangBanNaTourSpider.py 1KB
BenXiHengRenSpider.py 1KB
HuangShanQuTourSpider.py 1KB
ShaoXingGovSpider.py 1KB
JiLinBeiDaHuSpider.py 1KB
HuangShan365JiaSpider.py 1KB
LiJiangShuHeSpider.py 1KB
ChengDuGovSpider.py 1KB
SanYaTourGovSpider.py 1KB
ChengDuSpider.py 1KB
ZhouShanGovSpider.py 1KB
GuangZhouVisitSpider.py 1KB
DeHuaSpider.py 1KB
TianJinTourSpider.py 1KB
GuiLinCMSpider.py 1KB
TaiNingSpider.py 1KB
SanYaTourSpider.py 1KB
共 114 条
- 1
- 2
资源评论
计算机毕设论文
- 粉丝: 9948
- 资源: 398
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功