78 lines
2.7 KiB
Markdown
78 lines
2.7 KiB
Markdown
Web搜索技术 第一次作业 网站信息精准采集技术
|
||
===
|
||
|
||
## 前言
|
||
|
||
姑且这就算做实验报告吧。首先由于被当年信通院的OJ的各种奇怪问题惊艳到而产生心理阴影,我希望我的程序可以被**人工审核**。
|
||
|
||
## 需求分析
|
||
|
||
网站信息精准采集程序的要求
|
||
|
||
- [x] 采集想要的内容,不多不少不重复 ~ 完备性
|
||
- [x] 对网站不构成负担 (性能压力不大)~ 轻量采集
|
||
- [x] 出现异常情况 ~ 自行停止程序
|
||
- [ ] 程序异常退出 ~ 自动重启
|
||
- [x] 断点续采 ~ 鲁棒性
|
||
- [x] 精准采集 ~ 正则表达式
|
||
- [x] 采集过程信息及时展示 ~ 界面友好
|
||
- [x] 采集结果实时存储 ~ 写文件
|
||
- [x] 允许多个机器同时运行,采集不同的内容 ~ 并行性所有内容构成完备集。
|
||
|
||
## 技术实现
|
||
|
||
为了可以达到“界面友好”的需求,使用PyTk实现了一个GUI,因此整个程序分为两大部分:
|
||
|
||
- UI: 负责处理GUI交互
|
||
- Spider:负责爬虫相关逻辑
|
||
|
||
程序运行时会涉及两个线程:
|
||
|
||
- Mainloop:GUi主循环事件,处理点击以及页面绘制
|
||
- TimmerThread:子进程,负责计时并发送网络请求
|
||
|
||
为了降低代码耦合度,抽离如下模块:
|
||
|
||
- errors.py 定义各种自定义错误
|
||
- GUI.py 主要的GUI方面的代码,包括所有的子组件的实现
|
||
- main.py 程序入口
|
||
- spider.py 爬虫相关代码
|
||
- thread.py 计时器子线程的代码,子线程中调用GUI相关组件更新状态
|
||
- utils.py 包括正则匹配,格式化输入输出的一些工具类
|
||
|
||
## 具体使用
|
||
|
||
测试平台:Windows 10 专业版 1909 18363.752
|
||
|
||
Pyhton版本:3.7.3
|
||
|
||
安装依赖:
|
||
|
||
```bash
|
||
pip install -i requirements.txt
|
||
```
|
||
|
||
运行:
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
填写学号并配置多机器(可选),点击开始即可。
|
||
|
||
中途可自由暂停、继续、停止、关闭窗口,基本不会引起文件保存错误,并且可以继续之前的进度进行爬取。
|
||
|
||
个人认为程序异常退出还要重启有点问题,会导致程序无法正常关闭,无论如何关闭,对于程序来说都是发生了一个异常,所以无论如何都会重启,并非爬虫的本分,所以未作实现。
|
||
|
||
由于本人是任务B,所以对于任务A的并未做任何实现,但是考虑到接口类似,仅仅声明了接口,如果需要可以对其进行实现即可
|
||
|
||
|
||
## 目前的问题
|
||
|
||
有一些符号例如'•'(\u2202)和' '(\xa0)不存在GBK对应符号,因此使用空格进行替换。
|
||
|
||
这也是为什么我对于自动判别持怀疑态度。
|
||
|
||
## 明知存在问题为什么还要早早交
|
||
|
||
判别程序的问题不是我的责任,我认为我已经完成了规定的项目,我既然大晚上十分兴奋写完,一定要提交一下。见识一下自动判决会出什么问题。 |