WebMagic入门案例

WebMagic入门案例WebMagic 总体架构图如下 项目结构图配置文件 pom xml xmlversion 1 0 encoding UTF 8

WebMagic总体架构图如下:

在这里插入图片描述

项目结构图

在这里插入图片描述

配置文件

  1. 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> 
  2. 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 

实现类

  1. 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

(0)
上一篇 2026年3月17日 下午11:04
下一篇 2026年3月17日 下午11:04


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号