# Spider
> 由于学校网络中心出问题了,第一个项目原来的域名暂时访问不了,然后新开了一个URL:[https://jinshuai86.github.io/EtrizDoc](https://jinshuai86.github.io/EtrizDoc)
[](http://hits.dwyl.io/jinshuai86/Spider)
Spider是一个基于Java的简易多线程爬虫框架,并且提供了默认组件。用户也可以根据需要实现自己的组件
- 具体流程
- 首先在调度器中添加初始种子,开启线程池。
- 工作线程开始从种子调度器中取URL种子
- 使用下载器获取URL对应的页面内容
- 使用解析器解析页面内容,将页面里的URL封装成URL种子,添加到种子调度器中。
- 持久器会判断是否已经存在类似的文本内容,如果存在会做丢弃处理,否则会将页面中的内容做持久化处理。

# 使用
## 开发环境
- JDK8+
- Maven3+
- lombok
## 使用
- 修改`application.properties`中存放解析内容的路径`dir`
- 如果使用`Redis`作为种子调度器(默认使用优先队列),需要修改`application.properties`中配置的`redis-ip`、`redis-port`和`redis-password`。如果你的Redis不需要密码验证,就不用修改文件里的`password`属性。
- 如果使用消息队列(框架使用的是[RocketMQ](https://rocketmq.apache.org/)),需要修改`application.properties`中配置的`mq-ip`、`mq-port`。不用的话可以将`mq-switch`置为0,关闭消息队列。
- 默认解析器解析的[河北工业大学新闻网](http://xww.hebut.edu.cn/gdyw/index.htm)中的新闻,如果解析其它类型的网页,需要重写`Parser.java`接口以及提供给种子调度器的初始种子
- 运行`Spider.java`
```Java
Spider.build()
.addUrlSeed(new UrlSeed("http://xww.hebut.edu.cn/gdyw/index.htm"))
.run();
```
# 项目结构
```Shell
├── logs // 系统日志
├── spider-consumer // 消费模块(消费4XX 3XX状态码对应URL)
├── spider-core // 爬虫模块
│ ├── src // 源码
│ ├── |——main
│ ├── ├──|——java/com/jinshuai
│ ├── ├──├──|——core // 核心组件
│ ├── ├──├──|————downloader // 下载器
│ ├── ├──├──|————parser // 解析器
│ ├── ├──├──|————saver // 持久器
│ ├── ├──├──|————scheduler // URL调度器
│ ├── ├──├──|——entity // 实体
│ ├── ├──├──|——util // 工具
│ ├── ├──|——resources // 资源目录
│ ├── ├──|——|——application.properties // 配置文件
```
# 进度
## Finished
- [x] 配置了[Http连接池](https://hc.apache.org/httpcomponents-client-ga/),完成了Http请求和处理Http响应<br>
- [x] [解析](https://jsoup.org/)响应的内容
- [x] 配置线程池,通过[Redis](https://redis.io/)缓存URL种子
- [x] 持久化解析结果
- [x] 添加新的种子调度器(优先队列结合布隆过滤器)
- [x] 对于Redis调度器,存放url对应的hash进行判重减少空间使用
- [x] 使用SimHash进行文本相似度检测
- [x] 将3XX 4XX 5XX状态码对应URL放到消息队列中去消费
## TODO
- [ ] 定时解析失败日志,将失败URL重新加入爬取仓库,设置失败次数限制,超过指定次数就放弃。
- [ ] 分布式环境下,统一存放解析后的文本
- [ ] 各个组件进行热替换
- [ ] 优化解析页面代码
# 参考
- **代码和设计思路**参考自[https://github.com/xjtushilei/ScriptSpider](https://github.com/xjtushilei/ScriptSpider)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
资源推荐
资源详情
资源评论


















收起资源包目录









































































































共 60 条
- 1
资源评论


JJJ69
- 粉丝: 6463
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 北京建工集团冬施测温工作培训资料.doc
- 管流、明渠流及渗流.doc
- 大数据背景下的网络营销课程改革探讨.docx
- t梁首件工程总结报告.doc
- FX系列PLC机械手传送带设计方案.doc
- 实例工程清单计价造价指标分析.doc
- 有限公司废水处理站操作规程.doc
- Javaseript-DOM脚本程序设计方案的发展与应用方法.doc
- 桩基承台基础方案.docx
- EN航空结算中心checkup报告-EN.doc
- 监理质量管理制度.doc
- 二层工艺楼建筑工程量清单计价实例(含图纸-工程量计算).doc
- 数据结构与算法第十章Algorithmdesigntechniques.ppt
- 计算机控制系统试题三参考答案.doc
- 项目部主要管理人员审批表-.doc
- 第2章--数据排序(C--版).ppt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
