本节我将向大家介绍如何运行与调试YayCrawler。该框架是采用SpringBoot开发的,所以可以通过java –jar  xxxx.jar的方式运行,也可以部署在tomcat等容器中运行。

首先让我们介绍一下运行环境:

1、jdk8

2、安装mysql数据库,用作存储解析规则等数据,需要创建一个“yayCrawler”的数据库实例,并执行quartz相关的数据库脚本:quartz.sql(见发布包或源码)。

3、安装redis,用作任务队列

4、安装mongoDB用于存放结果数据

5、安装ftp服务器软件ftpserver(可选,用于存放下载图片)

一、运行发布包

首先从https://github.com/liushuishang/YayCrawler.Release.git获取release包,目录如下:

每个文件夹里面的文件结构是一样的,以admin文件夹为例

casperjs和phantomjs两个文件夹是为了执行某些特殊操作准备的,这里先不用理会。xxx_local.properties是一个服务配置文件,里面有配置端口、数据库连接等参数,可以按照实际参数来调整;quartz.sql是运行quartz框架需要的数据库表脚本,方在这里是为了方便;start.bat和start.vbs都是启动脚本,双击就可以启动admin端,start.bat会在控制台输出日志内容,start.vbs是在后台执行,不会弹出控制台,启动后会在该文件夹产生一个“catalina.base_IS_UNDEFINED”的文件夹,里面存放的是输出日志;双击stop.bat就可以停止admin端程序。我们双击start.bat来启动admin端程序:

可以看到admin端已经成功启动,浏览器http://localhost:8069/admin/即可访问管理界面:

Master与Worker的启动与上面Admin端一致,只是没有web界面,这里不再赘述。

二、源码的运行与调试

首先从https://github.com/liushuishang/YayCrawler.git拉取源码,然后用Intellij Idea打开(Eclipse也可以),可以看到如下的目录解构:

yaycrawler-admin:Web管理控制台,用户可以这里配置解析规则、测试规则、查看任务队列情况和发布任务等。

yaycralwer-master:管理任务队列和任务调度,与admin和worker互相通信。

yaycralwer-worker:爬虫任务的工作端,定时向master发送心跳,接收并执行任务,负责数据的持久化。

yaycralwer-spider:与WebMagic结合,负责下载页面、解析页面、定义爬虫任务的处理流程和接口。

yaycrawler-common:公用的实体模型和工具包。

yaycralwer-monitor:提供反监控的工具包,比如验证码刷新、自动登陆等

yaycralwer-proxy:工具包,用于从网上搜索可用的ip代理

yaycrawler-cache:为框架提供数据缓存功能的组件。

yaycrawler-quartz:通用的定时任务调度组件,可以通过配置定时调度不同的任务。可以用来做定时爬虫任务。

yaycrawler-dao:提供与mysql数据库交互的功能。

yaycrawler-ftpserver:ftpserver客户端工具包。

我们分别为admin、master和worker配置三个TomcatServer,各占用的http端口如下图所示。

然后分别修改各自工程下的src/main/resources/application.properties文件,如(请注意红色的部分配置)

Admin端:

signature.token=2c91d29854a2f3fc0154a30959f40003
#Master的服务地址
master.server.address=http://127.0.0.1:8068/master/
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8069# bind to a specific NIC
server.address=127.0.0.1# the context path, defaults to '/'
server.context-path=/admin# the servlet path, defaults to '/'
server.servlet-path=/# base dir (usually not needed, defaults to tmp)
server.tomcat.basedir=/tmp# in seconds
server.tomcat.background-processor-delay=30# number of threads in protocol handler
server.tomcat.max-threads = 0# character encoding to use for URL decoding
server.tomcat.uri-encoding = UTF-8
#(这里是限制的文件大小)
multipart.max-file-size=50Mb
#(这里是限制请求的文件大小)
multipart.max-request-size=50Mb
# SPRING MVC (HttpMapperProperties)# pretty print JSON
http.mappers.json-pretty-print=false# sort keys
http.mappers.json-sort-keys=false# set fixed locale, e.g. en_UK
spring.mvc.locale=zh_CN# set fixed date format, e.g. dd/MM/yyyy
spring.mvc.date-format=yyyy-MM-dd# PREFIX_ERROR_CODE / POSTFIX_ERROR_CODE
spring.resources.cache-period=60000# cache timeouts in headers sent to browser
spring.mvc.message-codes-resolver-format=PREFIX_ERROR_CODE# THYMELEAF (ThymeleafAutoConfiguration)
spring.thymeleaf.cache=false
spring.thymeleaf.check-template-location=true
spring.thymeleaf.content-type=text/html
spring.thymeleaf.enabled=true
spring.thymeleaf.encoding=UTF-8
#spring.thymeleaf.excluded-view-names= # Comma-separated list of view names that should be excluded from resolution.
spring.thymeleaf.mode=HTML5
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
#spring.thymeleaf.template-resolver-order= # Order of the template resolver in the chain.
#spring.thymeleaf.view-names= # Comma-separated list of view names that can be resolved.#配置Mysql数据库
spring.datasource.url = jdbc:mysql://localhost:3306/yaycrawler?autoReconnect=true

&characterEncoding=utf8&useSSL

=false
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update   //首次运行请修改为create来创建数据表,完成后更改为update
# Naming strategy
#spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.DefaultNamingStrategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect#配置MongoDB数据库
# MONGODB (MongoProperties)
#spring.data.mongodb.authentication-database= # Authentication database name.
spring.data.mongodb.database=crawler
#spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use.
#spring.data.mongodb.grid-fs-database= # GridFS database name.
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
# Enable Mongo repositories.
spring.data.mongodb.repositories.enabled=true
#spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. When set, host and port are ignored.
#spring.data.mongodb.username=
#spring.data.mongodb.password=

master端:

signature.token=2c91d29854a2f3fc0154a30959f40003
#一次分配给worker的任务大小
worker.task.batchSize=500
#worker的刷新时间
worker.refreshInteval=20000
#处理中队列超时时间
task.queue.timeout=5400000
#批量加入队列时的批量包含的任务数
task.queue.batchSize=1000
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8068# bind to a specific NIC
server.address=127.0.0.1
#server.address=127.0.0.1# the context path, defaults to '/'
server.context-path=/master# the servlet path, defaults to '/'
server.servlet-path=/# base dir (usually not needed, defaults to tmp)
server.tomcat.basedir=/tmp# in seconds
server.tomcat.background-processor-delay=30# number of threads in protocol handler
server.tomcat.max-threads = 0# character encoding to use for URL decoding
server.tomcat.uri-encoding = UTF-8spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database=1
#spring.redis.password=

Worker端:

signature.token=2c91d29854a2f3fc0154a30959f40003
master.server.address=http://127.0.0.1:8068/master/
context.path=http://127.0.0.1:8086/worker/
worker.heartbeat.inteval=60000
worker.spider.threadCount=10# ftpserver服务器地址
ftp.server.url=172.17.82.46
# ftpserver 端口
ftp.server.port=2121
# ftpserver 用户名
ftp.server.username=admin
# ftpserver 密码
ftp.server.password=admin# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8086# bind to a specific NIC
server.address=127.0.0.1# the context path, defaults to '/'
server.context-path=/worker# the servlet path, defaults to '/'
server.servlet-path=/# base dir (usually not needed, defaults to tmp)
server.tomcat.basedir=/tmp# in seconds
server.tomcat.background-processor-delay=30# number of threads in protocol handler
server.tomcat.max-threads = 0# character encoding to use for URL decoding
server.tomcat.uri-encoding = UTF-8#Spring JPA
spring.datasource.url = jdbc:mysql://localhost:3306/yaycrawler?autoReconnect=true

&characterEncoding=utf8&useSSL=false

spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = false
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = none
# Naming strategy
#spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.DefaultNamingStrategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect# MONGODB (MongoProperties)
#spring.data.mongodb.authentication-database= # Authentication database name.
spring.data.mongodb.database=crawler
#spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use.
#spring.data.mongodb.grid-fs-database= # GridFS database name.
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
# Enable Mongo repositories.
spring.data.mongodb.repositories.enabled=true
#spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. When set, host and port are ignored.
#spring.data.mongodb.username=
#spring.data.mongodb.password=

启动Master、Admin和Worker,在浏览器中输入http://localhost:8069/admin/,即可访问管理界面。

三、案例演示

前面已经介绍如何启动项目,现在我们以抓取博客园的博客为例讲解如何使用框架。假设我要通过框架抓取http://www.cnblogs.com/yuananyun/页面的所有博客的标题和摘要,让我们来开始创建奇迹吧,哈哈。

首先打开我们的管理控制台界面,可以看到我们已经有一个worker等待我们发布任务了:
然后我们来配置页面和解析规则:
1、新建页面
2、新建区域
打开http://www.cnblogs.com/yuananyun/,然后通过调试工具查看源码:
我们感兴趣的区域是包含class为“day”的div,这就是我们区域的选择依据,我们来新建一个区域:
可以看到我们已经正确的抓取到我们所需要的div片段了,说明我们的区域选择器是正确的!下面让我们来配置规则来抓取文章的标题。点击页面上的“字段规则”,弹出配置页面:
点击测试我们可以看到已经抓到了文章的标题了,点击保存。我们在来新建一个字段规则来抓取文章的摘要:
好,让我们看看已经配置的规则的情况:
实际上我们还可以创建子链接的抓取规则,也可以创建更多的区域,后面的章节会有详细的讲解。现在让我们来测试这个页面的抓取结果,点击页面上的“测试区域”将会弹出如下结果界面:
是不是已经看到我们想要的结果了呢?
好,上面的种种还只是在Admin端的测试,我们把这个任务发布出去到worker上执行以下看看:
提交后查看任务队列:
然后很快任务就执行完成了:
点击页面上的“查看结果”按钮查看结果:
这个便是从MongoDB中查询出来的结果了。
最后,本节我们主要讲解了如何运行与调试YayCrawler框架,并以抓取博客园博客为例演示了框架的使用流程,后面的内容更精彩,谢谢关注!

转载于:https://www.cnblogs.com/yuananyun/p/5751377.html

开源通用爬虫框架YayCrawler-运行与调试相关推荐

  1. 开源通用爬虫框架YayCrawler-页面的抽取规则定义

    本节我将向大家介绍一下YayCrawler的核心-页面的抽取规则定义,这也是YayCrawler能够做到通用的主要原因之一.如果我要爬去不同的网站的数据,尽管他们的网站采用的开发技术不同.页面的结构不 ...

  2. 搜狗词库爬虫(2):基础爬虫框架的运行流程

    系列目录: 搜狗词库爬虫(1):基础爬虫架构和爬取词库分类 项目Github地址:github.com/padluo/sogo- 各模块对应的内容如下: getCategory.py,提取词库分类ID ...

  3. scrapy爬虫框架及运行流程

    文章目录 1 scrapy 简介 1.1 什么是爬虫? 1.2 浏览网页的过程中发生了什么? 1.3 scrapy爬虫框架 1.4 scrapy爬虫框架优势 2 scrapy 构架图 3 Scrapy ...

  4. 开源 Python网络爬虫框架 Scrapy

    开源 Python 网络爬虫框架 Scrapy:http://blog.csdn.net/zbyufei/article/details/7554322 介绍 所谓网络爬虫,就是一个在网上到处或定向抓 ...

  5. 什么是爬虫,常见的java爬虫框架有哪些?-蛙课网

    随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,与此同时,java语言是使用范围最广的编程语言.今天我们一起了解一下什么是爬虫,java爬虫框架有哪些. 网络爬虫(又称为网页蜘蛛,网络机器人 ...

  6. 网络爬虫(2)-- Java爬虫框架

    2019独角兽企业重金招聘Python工程师标准>>> Nutch Nutch属于分布式爬虫,爬虫使用分布式,主要是解决两个问题:1)海量URL管理:2)网速.如果要做搜索引擎,Nu ...

  7. 一、scrapy爬虫框架——概念作用和工作流程 scrapy的入门使用

    scrapy的概念和流程 学习目标: 了解 scrapy的概念 了解 scrapy框架的作用 掌握 scrapy框架的运行流程 掌握 scrapy中每个模块的作用 1. scrapy的概念 Scrap ...

  8. 那个爬虫框架好(简单对比)

    对于爬虫框架本身来说,都是很优秀的,说那个更好,不如说那个更适合公司的业务需求.比如javaweb项目中需要某些网站的金融系列新闻,得每天定时去抓取一些数据,你就可以考虑WebMagic框架,能够轻松 ...

  9. java 爬虫框架nutch_网络爬虫(2)-- Java爬虫框架

    Nutch Nutch属于分布式爬虫,爬虫使用分布式,主要是解决两个问题:1)海量URL管理:2)网速.如果要做搜索引擎,Nutch1.x是一个非常好的选择.Nutch1.x和solr或者es配合,就 ...

最新文章

  1. 互联网项目管理要点(转)
  2. 利用Swift语言特性,随手写个伪随机数生成器
  3. 【NOIP2013模拟9.29】密码
  4. 前端跨域请求get_前端实现跨域访问
  5. c语言限制字符数,C语言中“不受限制”的字符串函数总结.pdf
  6. 第九十七期:新版Kite:实时补全代码,Python之父都发声力挺!
  7. python分类下取得所有子类_如何找到给定名称的类的所有子类?
  8. aidl使用_Android进阶之AIDL如何使用自定义类型
  9. ARM开发步步深入之NandFlash 4KB突围
  10. Canvas--文字渲染
  11. springboot - 应用实践(N)使用springboot内置的@Scheduled
  12. MTK车载平台实现MIPI转LVDS驱动移植
  13. 图像空间滤波总结(平滑空间滤波器及锐化空间滤波器)
  14. 樊登读书赋能读后感_樊登读书会本周末视频解读新书:《赋能》突破深井,打造优质团队...
  15. iOS和iPad OS 14 Beta 4发行说明
  16. 【系统集成项目管理工程师】项目立项
  17. 基于Java毕业设计大学生校园兼职系统源码+系统+mysql+lw文档+部署软件
  18. 海康威视摄像头存储到电脑硬盘
  19. 云原生系列技术(四):DevOps技术
  20. 初识EMC元器件(九)——气体放电管的参数解读及选型应用

热门文章

  1. 仅1年GitHub Star数翻倍,Flink 做了什么?
  2. 结合传统与数字技术,构建逼真的机械设计
  3. 《仙剑奇侠传online》游戏后台优化分析:CPU、内存与启动时间
  4. 腾讯云为小游戏开发者升级工具箱 小游戏联机对战引擎免费用
  5. 浅谈手机游戏测试的要点
  6. 题目:社区人员登记管理系统(有源码链接免费下载)
  7. PHP面试题:使用PHP描述快速排序算法,对象可以是一个数组?
  8. 通过Rman定期删除归档脚本
  9. 部署负载均衡 Keepalived DR群集优化版(减少部署完成后的BUG)
  10. mysql中tinyint、smallint、int、bigint的区别介绍