结合比较流行的框架SpringBoot抓取CSDN的数据
有关VW-Cralwer的介绍可以看这里,简单轻便开源的一款Java爬虫框架。
下面结合比较流行的框架SpringBoot抓取CSDN的数据(有关的Spingboot的使用可以参考这里)
配置POM
使用Springboot做架构,redis做数据存储,vw-crawler做爬虫模块,最终的pom如下
1 | <parent> |
redis相关配置
因为已经添加了redis的相关依赖,只需要在application.properties里配置redis的链接参数即可,如下
1 | # Redis数据库索引(默认为0) |
代码里的使用
1 | @Component |
比较简单,一个保存一个获取即可,这里使用StringRedisTemplate时为了更直观的在redis客户端中查看内容。
爬虫
页面数据model
使用流行的注解方式来填充数据
1 | @CssSelector(selector = "#mainBox > main > div.blog-content-box > div.article-title-box > h1", resultType = SelectType.TEXT) |
使用选择器来精确定位数据,使用chrome浏览器的可以这样快速获取
如图,也支持xpath的快捷选择(vw-crawler后续会支持xpath定位元素),当然了,有些元素如”阅读数:xxx”,是不能自动转化为整型,所以还需要第二次解析处理
爬虫配置
这里需要配置请求头如“User-Agent”,目标页URL的正则表达式,列表页URL的正则,还有爬虫的线程数和超时等等,如下
1 | new VWCrawler.Builder().setUrl("https://blog.csdn.net/qqhjqs").setHeader("User-Agent", |
需要实现CrawlerService,看下源码
1 | public boolean isExist(String url){ |
可以看到parsePage可以处理数据的二次解析,save则负责保存数据,isExist和isContinue是处理爬取过程中的一些判断逻辑
- isExist 是url的二次判重,你可以通过查找数据库来判断即将要抓取的URL是否存在数据库中,存在则返回true,不存则正常抓取即返回false;
- isContinue 是在解析页面数据前判断一下该页面是否有WAF(Web Application Firewal),如果有则返回false,没有则正常进行解析即返回true;
要在springboot全部初始化完毕之后再去启动爬虫, 所有需要这样配置
1 | @Component |
启动
直接右键执行CrawlerApplication即可
最终抓取如图
相关链接
该爬虫地址:传送门