# Gwenson-robot **Repository Path**: wgs123/Gwenson-robot ## Basic Information - **Project Name**: Gwenson-robot - **Description**: 这是一个使用JAVA语言开发的应用级的分布式爬虫搜索引擎机器人 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://www.gwenson.com - **GVP Project**: No ## Statistics - **Stars**: 101 - **Forks**: 26 - **Created**: 2017-12-01 - **Last Updated**: 2025-06-28 ## Categories & Tags **Categories**: spider **Tags**: None ## README # Gwenson-robot爬虫机器人 **这是一个使用JAVA语言开发的可分布式的爬虫机器人,利用redis的list实现匀速爬取目标,并实现了url去重和目标内容去重。其中目标内容去重是先利用word分词然后再利用simhash算法得到一个SimHashCode值,再利用抽屉原理判断海明距离从而得到相似度。注意:使用JDK1.8** [TOC] ### 我的项目应用部署地址 ​ [Gwenson 个人爬虫搜索引擎](http://www.gwenson.com) ### 该项目都用到了哪些技术? ​ spring boot、spring data redis、jsoup、word、mybatis、spring data elasticsearch、spring mvc、bootstrap、JSP等等 ​ ### 工程项目结构的介绍 #### common 模块项目是一个公共工具类依赖包模块。 项目结构介绍: ``` common └─src └─main └─java └─com └─gwenson └─common ├─dao │ └─redis ├─model └─utils ``` #### search-robot模块项目是一个基于spring boot框架的爬虫机器人模块。 项目结构介绍: ```wiki search-robot └─src └─main ├─java │ └─com │ └─gwenson │ ├─controller │ ├─listener │ └─robot │ ├─cahce │ ├─config │ ├─page │ │ ├─dto │ │ ├─redis │ │ │ └─dao │ │ ├─rule │ │ │ ├─dao │ │ │ └─service │ │ │ └─impl │ │ └─service │ │ └─impl │ ├─proterty │ │ ├─model │ │ ├─redis │ │ │ └─dao │ │ └─task │ └─utils └─resources ├─application.properties //启动配置 ├─application-prod.properties //生成环境 ├─application-dev.properties //测试环境 ├─blacklist.txt //黑名单 ├─whitelist.txt //白名单 └─logback.xml //logback日志配置 ``` ​ search-robot的src/main/resouces下的文件介绍 ​ application.properties是项目启动的必要配置文件: ```properties #项目监听端口 server.port=8081 #项目路径 #server.context-path=/ #引用生配置,prod是生产,dev是测试 spring.profiles.active=prod #容器启动完成后的监听类 context.listener.classes=com.gwenson.listener.ApplicationStartup #是否开启代理ip,true开启,false不开启 gwensong.robot.property.start=false #是否开启自动定时爬取代理ip功能,true开启,false不开启 gwensong.robot.property.autoScheduled=false #自定义代理ip列表 #gwensong.robot.property.userDefinedPath=D:/gwenson/property.txt gwensong.robot.property.userDefinedPath= #分表数,用来生成tableId database.table.num=64 #设置爬虫的优先级别,广度优先为:wide;深度度优先为:depth gwensong.robot.search.scope=depth #配置白名单列表 gwensong.robot.search.whitelistPath=/whitelist.txt #配置黑名单列表 gwensong.robot.search.blacklistPath=/blacklist.txt #web controller启动爬虫用户名 gwenson.robot.user.username=root #web controller启动爬虫密码 gwenson.robot.user.password=123456 ``` application-prod.properties或application-dev.properties是区分启动的环境配置,和application.properties里的spring.profiles.active=prod对应: ```properties profile = prod_envrimont #tomcat 编码设置,默认是UTF-8 server.tomcat.uri-encoding=UTF-8 #tomcat的启动日志logs server.tomcat.accesslog.directory=/gwenson/logs/search-robot/tomcat.log # REDIS (RedisProperties) # database name spring.redis.database=0 # localhost # server host redis的地址 spring.redis.host=127.0.0.1 # server password redis的密码 spring.redis.password= # connection port redis的监听端口 spring.redis.port=6379 # pool settings ... spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=-1 spring.redis.pool.max-wait=-1 spring.redis.timeout=100000 ``` #### search-view模块是一个基于spring mvc的搜索引擎web门户应用 项目结构介绍: ```wiki src ├─main │ ├─java │ │ └─com │ │ └─gwenson │ │ └─search │ │ ├─controller │ │ ├─dao │ │ │ ├─elasticsearch │ │ │ └─xml │ │ ├─filter │ │ ├─interceptor │ │ ├─listener │ │ ├─model │ │ ├─service │ │ │ └─imp │ │ ├─servlet │ │ └─utils │ ├─resources │ │ └─spring //spring datasource位置 │ └─webapp │ └─WEB-INF │ ├─static │ │ ├─conf │ │ └─html //首页 index.html └──────────└─views //结果页 search.jsp ``` ​ search-view的src/main/resouces下的文件介绍 ​ jdbc.properties是search-view的mysql数据库和redis连接用户和密码存放文件: ```properties #mysql的数据库连接配置 jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/search?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true jdbc.username=root jdbc.password=123456 jdbc.maxActive=20 jdbc.maxIdle=10 jdbc.maxWait=4000 #Redis settings #Redis的配置 redis.host=127.0.0.1 redis.port=6379 redis.password= redis.maxIdle=300 redis.minIdle=10 redis.maxActive=600 redis.maxWait=1000 redis.testOnBorrow=true redis.testOnReturn=true redis.timeout=1000000 ``` ### 怎么使用? #### (一) 安装maven,编译maven项目 在Gwenson-robot目录下执行mvn命令: ``` $ mvn clean install package -Dmaven.test.skip=true ``` 成功会在最好出现该字样: ``` [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] search-parent ...................................... SUCCESS [ 0.400 s] [INFO] common ............................................. SUCCESS [ 2.891 s] [INFO] search-robot ....................................... SUCCESS [ 3.299 s] [INFO] search-view ........................................ SUCCESS [ 15.059 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 22.235 s [INFO] Finished at: 2017-12-05T17:19:21+08:00 [INFO] Final Memory: 49M/345M [INFO] ------------------------------------------------------------------------ ``` #### (二) 部署启动search-robot ``` 1、安装redis 2、在项目src/main/resources下的application-prod.properties里的spring.redis.host= spring.redis.password= 配置你redis地址和密码 3、执行jar运行命令启动 java -jar /gwenson/app/search-robot/search-robot-0.0.1-SNAPSHOT.ja 4、在浏览器地址执行下面url启动爬虫 http://localhost:8081/start/search?username=root&password=123456 或 curl "http://localhost:8081/start/search?username=root&password=123456" ``` #### (三) 部署启动search-view 1、安装MYSQL ​ 然后在src/main/resouces下的jdbc.properties的mysql的数据库连接配置配置上你的地址属性 2、安装elasticsearch-2.3.4版本 ​ 安装word分词插件[点击这里查看安装方法](https://my.oschina.net/u/2532423/blog/1552640) ​ 在src/main/resouces下的spring.xml配置elasticsearch的服务地址: ``` ``` 127.0.0.1:9300改为你的服务地址和端口 3、解压\Gwenson-robot\search-view\target\search-view.war到你指定的目录如:d:\Gwenson-robot\search-view 4、安装tomcat ​ 修改tomcat下的conf下的server.xml的 ``` ``` ​ docBase改为你的项目地址 ​ 启动tomcat下的bin下的startup.sh ​ ### 项目开源地址 ​ [在开源中国Gitee上](https://gitee.com/wgs123/Gwenson-robot) ​ [在Github上](https://github.com/gwenson/Gwenson-robot)