webmagic入门
1、引入pom
<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>
2、编写接收的bean
package tech.chenxing.webmagic;
import lombok.Data;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.model.ConsolePageModelPipeline;
import us.codecraft.webmagic.model.OOSpider;
import us.codecraft.webmagic.model.annotation.ExtractBy;
import us.codecraft.webmagic.model.annotation.TargetUrl;
//@TargetUrl("https://www.gzcx.net/sitemap.html")
@ExtractBy(value = "//*[@id=\"myTable\"]/li/div[1]/a", multi = true)
@Data
public class RgBlogUrlBean {
@ExtractBy("//a/@href")
private String url;
@ExtractBy("//a/@title")
private String title;
}
- 类上的注解ExtractBy的属性 multi 说明返回的结果是一个列表
- 属性上的ExtractBy的内容是可以利用chrome浏览器的右键复制xpath可以获取到
- 多级属性用/分割,属性值获取采用 @属性值的方式获取,比如 @href
3、编写处理结果器
public class RgPageModelPipeline implements PageModelPipeline<RgBlogUrlBean> {
@Override
public void process(RgBlogUrlBean rgBlogUrlBean, Task task) {
System.out.println(rgBlogUrlBean.getUrl());
// log.info("{}",rgBlogUrlBean.getUrl());
}
}
- 泛型值传入你想反序列化的bean,实现的接口内部编写你的处理逻辑,可以打印日志,保存到数据库,基于结果调用三方接口
4、编写启动的函数
public static void main(String[] args) {
OOSpider.create(Site.me(), new RgPageModelPipeline(), RgBlogUrlBean.class)
.addUrl("https://www.gzcx.net/sitemap.html")
.thread(1)
.run();
}
可以说是非常的简便,可以用来抓取一些自己想要的数据。
正文到此结束