Fork me on GitHub

Java爬虫

爬虫练手

该项目是牛客网的项目,基于webmagic开源项目制作一个高效爬虫。项目采用了springboot框架。

webmagic

使用相关博客

官方中文文档

最需要关心的是PageProcessor接口。

自定义的Processor继承PageProcessor接口,重写process(Page page)方法编写抽取逻辑。调用page.putField()将结果存起来。调用page.addTargetRequest()可以存入一个url作为下一个爬取的页面地址。

如果是单纯的爬取到现在就可以实现了,官方给出的代码做了很多的解耦和扩展。还用到了被我遗忘很久的设计模式。

策咯模式

是把process()中处理也页面的方法抽取出来,用继承接口ProcessStrategy()的方式进行,使得代码解耦合。

面向接口编程而不要面向实现编程。

并且对process方法做了增强,前后都留了处理方法。这就是程序扩展性。

如果需要处理的数据超过两条,那么将他们封装成一个model吧!

装饰模式

在单页爬取的基础上实现多页迭代爬取。

对ProcessStrategy()进行虚假的实现,通过重载构造方法的方式将单页面处理方法组合进去。再创建一个子类继承这个虚假装饰类,做真正的实现。

插播:组合和聚合的区别

组合是较为紧密的关系,部分和整体共存亡,一般通过构造的方式成为整体的一部分。

聚合式较为松散的关系,部分和整体的生命周期未必一致。部分的实例化过程在整体外进行,通常以属性的方式成为整体的一部分。这是我的理解。

观察者模式

Pipeline会在一个爬取任务完成后被调用,比如存入数据库,或者打印到控制台。 当Pipeline准备好结果时主动去推送结果。

Observer可以是多个观察者(项目),Observable处理观察者的添加删除通知,自定义的pipeline继承Observable通知观察者(实现接口Observer,又是多态)。

Jsoup和XPath

基本思路就是寻找有唯一表示的div,根据class一层层定位(最好直接根据id定位,因为id是唯一的),最后找到想要的元素和属性。

Jsoup是用于解析HTML

XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

爬取数据的注意点:

听说很费IP (doge.jpg),还容易犯错,爬虫被封IP最直接的因素的是访问速度过快。谨慎爬取。建议使用代理ip。



本文标题:Java爬虫

文章作者:tsuki

发布时间:2022.03.19 - 21:06

最后更新:2022.03.23 - 21:59

原始链接:https://tsuki419.github.io/爬虫练手.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------THE END-------------
0%