WebMagic总体架构图如下:

项目结构图

配置文件
- pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0 modelVersion> <groupId>com.xiaoge groupId> <artifactId>xiaoge-crawler-webmagic artifactId> <version>1.0-SNAPSHOT version> <dependencies> <dependency> <groupId>us.codecraft groupId> <artifactId>webmagic-core artifactId> <version>0.7.3 version> dependency> <dependency> <groupId>us.codecraft groupId> <artifactId>webmagic-extension artifactId> <version>0.7.3 version> dependency> dependencies> project> - log4j.properties
log4j.rootLogger=INFO,A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
实现类
- JobProcessor
package com.xiaoge.webmagic.test; import us.codecraft.webmagic.Page; import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.pipeline.FilePipeline; import us.codecraft.webmagic.processor.PageProcessor; / * @Author: 潇哥 * @DateTime: 2020/10/2 下午10:14 * @Description: TODO */ public class JobProcessor implements PageProcessor { / * 负责解析页面, 抽取元素/获取链接 * @param page page */ public void process(Page page) { /* 解析元素 */ // 解析返回的数据page, 并且把解析的结果放到ResultItems中 // css选择器 page.putField("a", page.getHtml().css("a[rel=nofollow]").all()); // XPath page.putField("a2", page.getHtml().xpath("//a[@rel=nofollow]")); // 正则表达式 page.putField("a3", page.getHtml().css("a[rel=nofollow]").regex(".*我们.*").all()); /* 处理结果的api */ // get/toString都是处理结果的第一条 page.putField("a4", page.getHtml().css("a[rel=nofollow]").regex(".*我们.*").get()); page.putField("a5", page.getHtml().css("a[rel=nofollow]").regex(".*我们.*").toString()); // 获取所有数据 page.putField("a6", page.getHtml().css("a[rel=nofollow]").regex(".*我们.*").all()); /* 获取链接 page.addTargetRequests抓取page.getHtml().css("a[rel=nofollow]").links().all()获取的所有链接网址 */ page.addTargetRequests(page.getHtml().css("a[rel=nofollow]").links().all()); page.putField("url", page.getHtml().css(".title").all()); } / * 配置 */ // Site是爬虫的配置, Site.me()可以对爬虫进行一些配置 private Site site = Site.me() .setCharset("utf8") // 设置编码 .setTimeOut(10000) // 设置超时时间 单位/毫秒 .setRetrySleepTime(3000) // 设置重试的间隔时间 单位/毫秒 .setSleepTime(3) // 设置重试次数 ; public Site getSite() { return site; } / * 启动与设置Pipeline保存数据的方式 * @param args */ // 主函数, 执行爬虫, 不写输出到哪里(默认输出到控制台) public static void main(String[] args) { // 创建解析器(这个解析器是自己写的解析器) Spider.create(new JobProcessor()) // 设置爬取数据的页面 .addUrl("https://plus.jd.com/index?flow_system=appicon&flow_entrance=appicon11&flow_channel=pc") // 以文件的形式输出, 没设置默认使用内置的控制台pipeline输出到控制台 .addPipeline(new FilePipeline("/Users/xiaoge/Desktop/result")) // 设置5条线程做处理 .thread(5) // 执行爬虫 .run(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218980.html原文链接:https://javaforall.net
