# Spider
> 由于学校网络中心出问题了,第一个项目原来的域名暂时访问不了,然后新开了一个URL:[https://jinshuai86.github.io/EtrizDoc](https://jinshuai86.github.io/EtrizDoc)
[![HitCount](http://hits.dwyl.io/jinshuai86/Spider.svg)](http://hits.dwyl.io/jinshuai86/Spider)
Spider是一个基于Java的简易多线程爬虫框架,并且提供了默认组件。用户也可以根据需要实现自己的组件
- 具体流程
- 首先在调度器中添加初始种子,开启线程池。
- 工作线程开始从种子调度器中取URL种子
- 使用下载器获取URL对应的页面内容
- 使用解析器解析页面内容,将页面里的URL封装成URL种子,添加到种子调度器中。
- 持久器会判断是否已经存在类似的文本内容,如果存在会做丢弃处理,否则会将页面中的内容做持久化处理。
![流程图](./spider-flowchart.svg)
# 使用
## 开发环境
- 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封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java的多线程爬虫框架.zip (60个子文件)
SJT-code
_config.yml 26B
pom.xml 735B
spider-consumer
pom.xml 4KB
src
main
resources
logback.xml 5KB
application.properties 282B
java
com
jinshuai
Consumer.java 6KB
core
scheduler
Scheduler.java 349B
impl
RedisScheduler.java 4KB
saver
Saver.java 187B
impl
TextSaver.java 3KB
downloader
Downloader.java 429B
impl
HttpClientPoolDownloader.java 890B
parser
Parser.java 375B
impl
NewsParser.java 5KB
entity
UrlSeed.java 1KB
Page.java 2KB
util
PropertiesUtils.java 2KB
http
UserAgentArray.java 2KB
StatusHandler.java 242B
HttpUtils.java 14KB
JedisUtils.java 3KB
hash
MurmurHash.java 1KB
PageUtils.java 7KB
README.md 53B
spider-flowchart.svg 64KB
spider-core
pom.xml 4KB
src
test
java
com
TestHttpClient.java 5KB
TestGson.java 797B
TestRedis.java 534B
TestJDBC.java 733B
TestJsoup.java 25KB
TestReg.java 2KB
main
resources
logback.xml 5KB
application.properties 411B
java
com
jinshuai
Spider.java 7KB
core
scheduler
Scheduler.java 349B
impl
PriorityQueueScheduler.java 2KB
RedisScheduler.java 3KB
saver
Saver.java 187B
impl
DataBaseSaver.java 301B
TextSaver.java 3KB
downloader
Downloader.java 429B
impl
HttpClientPoolDownloader.java 947B
parser
Parser.java 375B
impl
NewsParser.java 5KB
BaiKeParser.java 337B
README.md 195B
entity
UrlSeed.java 1KB
Page.java 2KB
util
OfficeUtils.java 128B
PropertiesUtils.java 2KB
ExcelUtils.java 1KB
http
UserAgentArray.java 2KB
StatusHandler.java 242B
HttpUtils.java 17KB
JedisUtils.java 3KB
hash
MurmurHash.java 1KB
PageUtils.java 7KB
.gitignore 260B
README.md 4KB
共 60 条
- 1
资源评论
JJJ69
- 粉丝: 6351
- 资源: 5918
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20241117_024114_com.huawei.browser.jpg
- .turing.dat
- shopex升级补丁只针对 485.78660版本升级至485.80603版本 其它版本的请勿使用!
- 基于Django和HTML的新疆地区水稻产量影响因素可视化分析系统(含数据集)
- windows conan2应用构建模板
- 3_base.apk.1
- 基于STM32F103C8T6的4g模块(air724ug)
- 基于Java技术的ASC学业支持中心并行项目开发设计源码
- 基于Java和微信支付的wxmall开源卖票商城设计源码
- 基于Java和前端技术的东软环保公众监督系统设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功