这是一个使用JAVA语言开发的可分布式的爬虫机器人,利用redis的list实现匀速爬取目标,并实现了url去重和目标内容去重。其中目标内容去重是先利用word分词然后再利用simhash算法得到一个SimHashCode值,再利用抽屉原理判断海明距离从而得到相似度。注意:使用JDK1.8
[TOC]
spring boot、spring data redis、jsoup、word、mybatis、spring data elasticsearch、spring mvc、bootstrap、JSP等等
项目结构介绍:
common
└─src
└─main
└─java
└─com
└─gwenson
└─common
├─dao
│ └─redis
├─model
└─utils
项目结构介绍:
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是项目启动的必要配置文件:
#项目监听端口
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对应:
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
项目结构介绍:
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连接用户和密码存放文件:
#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
在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] ------------------------------------------------------------------------
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"
1、安装MYSQL 然后在src/main/resouces下的jdbc.properties的mysql的数据库连接配置配置上你的地址属性
2、安装elasticsearch-2.3.4版本 安装word分词插件点击这里查看安装方法
在src/main/resouces下的spring.xml配置elasticsearch的服务地址:
<elasticsearch:transport-client id="client" cluster-nodes="127.0.0.1:9300" cluster-name="my-application" />
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的
<Context docBase="d:\Gwenson-robot\search-view" path="/" reloadable="true" /></Host>
docBase改为你的项目地址
启动tomcat下的bin下的startup.sh
在Github上