1. 创建 Spring Boot 项目
使用 Spring Initializr 创建一个 Spring Boot 项目,选择需要的依赖,如 Spring Web 等。
2. 添加 WebMagic 依赖
在项目的 pom.xml
文件中添加 WebMagic 的核心和扩展依赖:
XML
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-core</artifactId>
<version>0.10.0</version>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.10.0</version>
</dependency>
3. 编写爬虫处理器
创建一个类实现 PageProcessor
接口,重写 process
方法和 getSite
方法。
java
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
public class MyPageProcessor implements PageProcessor {
// 抓取网站的相关配置
private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
@Override
public void process(Page page) {
// 定义如何抽取页面信息,并保存下来
page.putField("title", page.getHtml().xpath("//title/text()").toString());
page.putField("content", page.getHtml().css("div.content").toString());
// 从页面发现后续的 url 地址来抓取
page.addTargetRequests(page.getHtml().css("a", "href").all());
}
@Override
public Site getSite() {
return site;
}
public static void main(String[] args) {
Spider.create(new MyPageProcessor()).run();
}
}
4. 配置 Pipeline
Pipeline 用于处理爬取到的数据。可以创建一个自定义的 Pipeline,将数据存储到数据库或其他位置。
java
import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline;
public class MyPipeline implements Pipeline {
@Override
public void process(ResultItems resultItems, Task task) {
// 获取爬取的数据
String title = resultItems.get("title");
String content = resultItems.get("content");
// 将数据存储到数据库或其他操作
System.out.println("标题:" + title + ", 内容:" + content);
}
}
5. 启动爬虫
在 Spring Boot 的启动类中,调用爬虫的启动方法。
java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import us.codecraft.webmagic.Spider;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
// 启动爬虫
Spider.create(new MyPageProcessor()).addPipeline(new MyPipeline()).run();
}
}
6. 注意事项
-
网站反爬虫机制:在爬取网站时,要注意遵守网站的规则和反爬虫机制,合理设置爬取的间隔时间和重试次数,避免对网站造成过大压力。
-
数据存储:根据实际需求选择合适的数据存储方式,如数据库、文件等,并在 Pipeline 中实现相应的存储逻辑。
-
异常处理:在爬虫过程中可能会出现网络异常、解析异常等情况,需要添加适当的异常处理逻辑,保证爬虫的稳定运行。