Java爬虫有很多,WebMagic是其中一个,文档齐全,入门简单,个人用来爬取一些小数据很不错,以下以爬取彩票开奖结果为例,介绍一下基本用法。
WebMagic封装的很好,一般来说我们只用定义自己的PageProcessor(用于提取数据),Pipeline(用于处理提取的数据,如持久化)
下面依葫芦画瓢,我们来爬取彩票的开奖结果,以下内容仅限个人学习使用
需求:爬取彩票的开奖结果,并写入数据库
我们基于springboot框架开始,springboot可以方便的执行定时爬取,结合mybatis把数据写入数据库
----------------------------我是分割线---------------------------
体彩的玩法有:大乐透,7星彩,排列3,排列5
打开体彩官网,首页可以看到最近一期各种玩法的开奖结果
我们点击前面的各个玩法,可以进去看详情,至于为何要点击进去,作为初学者,单个玩法单独处理可能会简单明了
逐一观察请求,发现这个请求
这个请求返回的是JSON,数据完全符合我们的需求,直接利用就好了
这时你可能会质疑为啥你要先看请求的过程,而不是分析页面的内容,其实在找到这个请求之前,我也分析过页面,页面的源码中并没有开奖的数据,所有我断定数据是通过后加载的方式填入页面的,想到这里当然要看请求咯
JSON数据最好不过了,反解析后直接使用,少了在HTML中提取数据的过程,核心代码如下:
定义TcOrgProcessor类,写如何提取我们需要的数据
在springboot中可以很容易实现定时任务(百度搜索:springboot定时任务)
/***定时任务爬取开奖结果*/@ComponentpublicclassSchedulerTask{privatefinalLoggerlogger=LoggerFactory.getLogger(SchedulerTask.class);//注入自定义的Pipeline,传给WebMagic的Spider@ResourceprivateDrawResultPipelinedrawResultPipeline;/***定时爬取开奖结果*/@Scheduled(cron="00/28-23**")publicvoidfetch()throwsException{Spider.create(newTcOrgProcessor()).setExitWhenComplete(true).addPipeline(drawResultPipeline).start();//TODO:添加其他源的爬虫}}至此爬取,持久化的流程就结束了。
其他源只是PageProcessor不同,持久化的过程是相同的,所以只用写对应的PageProcessor即可,完成后PageProcessor后添加到定时任务即可定时爬取