开源通用爬虫框架YayCrawler-运行与调试
本節(jié)我將向大家介紹如何運(yùn)行與調(diào)試YayCrawler。該框架是采用SpringBoot開(kāi)發(fā)的,所以可以通過(guò)java –jar? xxxx.jar的方式運(yùn)行,也可以部署在tomcat等容器中運(yùn)行。
首先讓我們介紹一下運(yùn)行環(huán)境:
1、jdk8
2、安裝mysql數(shù)據(jù)庫(kù),用作存儲(chǔ)解析規(guī)則等數(shù)據(jù),需要?jiǎng)?chuàng)建一個(gè)“yayCrawler”的數(shù)據(jù)庫(kù)實(shí)例,并執(zhí)行quartz相關(guān)的數(shù)據(jù)庫(kù)腳本:quartz.sql(見(jiàn)發(fā)布包或源碼)。
3、安裝redis,用作任務(wù)隊(duì)列
4、安裝mongoDB用于存放結(jié)果數(shù)據(jù)
5、安裝ftp服務(wù)器軟件ftpserver(可選,用于存放下載圖片)
一、運(yùn)行發(fā)布包
首先從https://github.com/liushuishang/YayCrawler.Release.git獲取release包,目錄如下:
每個(gè)文件夾里面的文件結(jié)構(gòu)是一樣的,以admin文件夾為例
casperjs和phantomjs兩個(gè)文件夾是為了執(zhí)行某些特殊操作準(zhǔn)備的,這里先不用理會(huì)。xxx_local.properties是一個(gè)服務(wù)配置文件,里面有配置端口、數(shù)據(jù)庫(kù)連接等參數(shù),可以按照實(shí)際參數(shù)來(lái)調(diào)整;quartz.sql是運(yùn)行quartz框架需要的數(shù)據(jù)庫(kù)表腳本,方在這里是為了方便;start.bat和start.vbs都是啟動(dòng)腳本,雙擊就可以啟動(dòng)admin端,start.bat會(huì)在控制臺(tái)輸出日志內(nèi)容,start.vbs是在后臺(tái)執(zhí)行,不會(huì)彈出控制臺(tái),啟動(dòng)后會(huì)在該文件夾產(chǎn)生一個(gè)“catalina.base_IS_UNDEFINED”的文件夾,里面存放的是輸出日志;雙擊stop.bat就可以停止admin端程序。我們雙擊start.bat來(lái)啟動(dòng)admin端程序:
可以看到admin端已經(jīng)成功啟動(dòng),瀏覽器http://localhost:8069/admin/即可訪問(wèn)管理界面:
Master與Worker的啟動(dòng)與上面Admin端一致,只是沒(méi)有web界面,這里不再贅述。
二、源碼的運(yùn)行與調(diào)試
首先從https://github.com/liushuishang/YayCrawler.git拉取源碼,然后用Intellij Idea打開(kāi)(Eclipse也可以),可以看到如下的目錄解構(gòu):
yaycrawler-admin:Web管理控制臺(tái),用戶可以這里配置解析規(guī)則、測(cè)試規(guī)則、查看任務(wù)隊(duì)列情況和發(fā)布任務(wù)等。
yaycralwer-master:管理任務(wù)隊(duì)列和任務(wù)調(diào)度,與admin和worker互相通信。
yaycralwer-worker:爬蟲任務(wù)的工作端,定時(shí)向master發(fā)送心跳,接收并執(zhí)行任務(wù),負(fù)責(zé)數(shù)據(jù)的持久化。
yaycralwer-spider:與WebMagic結(jié)合,負(fù)責(zé)下載頁(yè)面、解析頁(yè)面、定義爬蟲任務(wù)的處理流程和接口。
yaycrawler-common:公用的實(shí)體模型和工具包。
yaycralwer-monitor:提供反監(jiān)控的工具包,比如驗(yàn)證碼刷新、自動(dòng)登陸等
yaycralwer-proxy:工具包,用于從網(wǎng)上搜索可用的ip代理
yaycrawler-cache:為框架提供數(shù)據(jù)緩存功能的組件。
yaycrawler-quartz:通用的定時(shí)任務(wù)調(diào)度組件,可以通過(guò)配置定時(shí)調(diào)度不同的任務(wù)。可以用來(lái)做定時(shí)爬蟲任務(wù)。
yaycrawler-dao:提供與mysql數(shù)據(jù)庫(kù)交互的功能。
yaycrawler-ftpserver:ftpserver客戶端工具包。
我們分別為admin、master和worker配置三個(gè)TomcatServer,各占用的http端口如下圖所示。
然后分別修改各自工程下的src/main/resources/application.properties文件,如(請(qǐng)注意紅色的部分配置)
Admin端:
signature.token=2c91d29854a2f3fc0154a30959f40003 #Master的服務(wù)地址 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 #(這里是限制請(qǐng)求的文件大小) 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數(shù)據(jù)庫(kù) 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 //首次運(yùn)行請(qǐng)修改為create來(lái)創(chuàng)建數(shù)據(jù)表,完成后更改為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數(shù)據(jù)庫(kù) # 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的任務(wù)大小 worker.task.batchSize=500 #worker的刷新時(shí)間 worker.refreshInteval=20000 #處理中隊(duì)列超時(shí)時(shí)間 task.queue.timeout=5400000 #批量加入隊(duì)列時(shí)的批量包含的任務(wù)數(shù) 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服務(wù)器地址 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=啟動(dòng)Master、Admin和Worker,在瀏覽器中輸入http://localhost:8069/admin/,即可訪問(wèn)管理界面。
三、案例演示
前面已經(jīng)介紹如何啟動(dòng)項(xiàng)目,現(xiàn)在我們以抓取博客園的博客為例講解如何使用框架。假設(shè)我要通過(guò)框架抓取http://www.cnblogs.com/yuananyun/頁(yè)面的所有博客的標(biāo)題和摘要,讓我們來(lái)開(kāi)始創(chuàng)建奇跡吧,哈哈。
首先打開(kāi)我們的管理控制臺(tái)界面,可以看到我們已經(jīng)有一個(gè)worker等待我們發(fā)布任務(wù)了: 然后我們來(lái)配置頁(yè)面和解析規(guī)則: 1、新建頁(yè)面 2、新建區(qū)域 打開(kāi)http://www.cnblogs.com/yuananyun/,然后通過(guò)調(diào)試工具查看源碼: 我們感興趣的區(qū)域是包含class為“day”的div,這就是我們區(qū)域的選擇依據(jù),我們來(lái)新建一個(gè)區(qū)域: 可以看到我們已經(jīng)正確的抓取到我們所需要的div片段了,說(shuō)明我們的區(qū)域選擇器是正確的!下面讓我們來(lái)配置規(guī)則來(lái)抓取文章的標(biāo)題。點(diǎn)擊頁(yè)面上的“字段規(guī)則”,彈出配置頁(yè)面: 點(diǎn)擊測(cè)試我們可以看到已經(jīng)抓到了文章的標(biāo)題了,點(diǎn)擊保存。我們?cè)趤?lái)新建一個(gè)字段規(guī)則來(lái)抓取文章的摘要: 好,讓我們看看已經(jīng)配置的規(guī)則的情況: 實(shí)際上我們還可以創(chuàng)建子鏈接的抓取規(guī)則,也可以創(chuàng)建更多的區(qū)域,后面的章節(jié)會(huì)有詳細(xì)的講解。現(xiàn)在讓我們來(lái)測(cè)試這個(gè)頁(yè)面的抓取結(jié)果,點(diǎn)擊頁(yè)面上的“測(cè)試區(qū)域”將會(huì)彈出如下結(jié)果界面: 是不是已經(jīng)看到我們想要的結(jié)果了呢? 好,上面的種種還只是在Admin端的測(cè)試,我們把這個(gè)任務(wù)發(fā)布出去到worker上執(zhí)行以下看看: 提交后查看任務(wù)隊(duì)列: 然后很快任務(wù)就執(zhí)行完成了: 點(diǎn)擊頁(yè)面上的“查看結(jié)果”按鈕查看結(jié)果: 這個(gè)便是從MongoDB中查詢出來(lái)的結(jié)果了。 最后,本節(jié)我們主要講解了如何運(yùn)行與調(diào)試YayCrawler框架,并以抓取博客園博客為例演示了框架的使用流程,后面的內(nèi)容更精彩,謝謝關(guān)注!轉(zhuǎn)載于:https://www.cnblogs.com/yuananyun/p/5751377.html
總結(jié)
以上是生活随笔為你收集整理的开源通用爬虫框架YayCrawler-运行与调试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Data truncation: Dat
- 下一篇: MongoDB数据导入hbase +
