2.3.2FilePipeline 文件保存
public static void main(String[] args) { Spider.create( new MyProcessor() ).addUrl("https://blog.csdn.net").addPipeline(new ConsolePipeline()).addPipeline(new FilePipeline("e:/data"))//以文件方式保存.run();}2.3.3JsonFilePipeline
以json方式保存
public static void main(String[] args) {Spider.create( new MyProcessor() ).addUrl("https://blog.csdn.net").addPipeline(new ConsolePipeline()).addPipeline(new FilePipeline("e:/data")).addPipeline(new JsonFilePipeline("e:/json"))// 以json方式保存.run();}2.3.4定制Pipeline
如果以上Pipeline都不能满足你的需要,你可以定制Pipeline
(1)创建类MyPipeline实现接口Pipeline
package cn.itcast.demo;import us.codecraft.webmagic.ResultItems;import us.codecraft.webmagic.Task;import us.codecraft.webmagic.pipeline.Pipeline;public class MyPipeline implements Pipeline {public void process(ResultItems resultItems, Task task) {String title=resultItems.get("title"); System.out.println("我的定制的 title:"+title);}}(2)修改main方法
public static void main(String[] args) { Spider.create( new MyProcessor() ).addUrl("https://blog.csdn.net").addPipeline(new ConsolePipeline()).addPipeline(new FilePipeline("e:/data")).addPipeline(new JsonFilePipeline("e:/json")).addPipeline(new MyPipeline())//定制化输出.run();}2.4Scheduler
我们刚才完成的功能,每次运行可能会爬取重复的页面,这样做是没有任何意义的 。Scheduler(URL管理) 最基本的功能是实现对已经爬取的URL进行标示 。可以实现URL的增量去重 。
目前scheduler主要有三种实现方式:
1)内存队列 QueueScheduler
2)文件队列FileCacheQueueScheduler
3) Redis队列 RedisScheduler
2.4.1内存队列
使用setScheduler来设置Scheduler
public static void main(String[] args) { Spider.create( new MyProcessor() ).addUrl("https://blog.csdn.net").setScheduler(new QueueScheduler()).run();}2.4.2文件队列
使用文件保存抓取URL,可以在关闭程序并下次启动时,从之前抓取到的URL继续抓取
(1)创建文件夹E:scheduler
(2)修改代码
public static void main(String[] args) { Spider.create( new MyProcessor() ).addUrl("https://blog.csdn.net")//.setScheduler(new QueueScheduler())//设置内存队列.setScheduler(new FileCacheQueueScheduler("E:\scheduler"))//设置文件队列.run();}运行后文件夹E:scheduler会产生两个文件blog.csdn.net.urls.txt和
blog.csdn.net.cursor.txt
2.4.3Redis队列
使用Redis保存抓取队列,可进行多台机器同时合作抓取
(1)运行redis服务端
(2)修改代码
public static void main(String[] args) { Spider.create( new MyProcessor() ).addUrl("https://blog.csdn.net")//.setScheduler(new QueueScheduler())//设置内存队列//.setScheduler(new FileCacheQueueScheduler("E:\scheduler"))//设置文件队列.setScheduler(new RedisScheduler("127.0.0.1"))//设置Redis队列.run();}3十次方文章爬取3.1需求分析
每日某时间段整从CSDN播客中爬取文档,存入文章数据库中 。
3.2频道设置
文章插图
向数据库tensquare_article的tb_channel表中添加记录
文章插图
3.3代码编写
3.3.1模块搭建
(1)创建模块tensquare_article_crawler,引入依赖
<dependency><groupId>us.codecraft</groupId><artifactId>webmagic‐core</artifactId><version>0.7.3</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j‐log4j12</artifactId></exclusion></exclusions></dependency><dependency><groupId>us.codecraft</groupId><artifactId>webmagic‐extension</artifactId><version>0.7.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐data‐jpa</artifactId></dependency><dependency><groupId>MySQL</groupId><artifactId>mysql‐connector‐java</artifactId></dependency><dependency><groupId>com.tensquare</groupId><artifactId>tensquare_common</artifactId><version>1.0‐SNAPSHOT</version></dependency>(2)创建配置文件Application.yml
server: port: 9014spring: application:name: tensquare‐crawler #指定服务名datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/tensquare_article? characterEncoding=UTF8username: root password: 123456jpa:database: MySQL show‐sql: trueredis:host: 127.0.0.1
推荐阅读
- 5G手机的发射功率,到底能有多大?
- 什么是JVM?
- 网络交换机如何规划,VLAN原理介绍
- 初学者如何区分Html5开发和前端开发
- 网络常见的9大命令
- 开发过程中快速抓包并解析
- 人工智能基础算法
- iOS 14“本地网络”权限是什么,需要开吗?
- Spring框架中的国际化支持
- 网络诈骗200万怎么判刑