Java爬虫③WebMagic 爬取案例

Java爬虫①HttpClient
Java爬虫②Jsoup
WebMagic官方文档
WebMagic
是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。
在这里插入图片描述

特性:

  1. 简单的API,可快速上手
  2. 模块化的结构,可轻松扩展
  3. 提供多线程和分布式支持

导入maven依赖`

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

demo

package com.sihi.crawler.webmagic;

import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import us.codecraft.webmagic.*;
import us.codecraft.webmagic.downloader.HttpClientDownloader;
import us.codecraft.webmagic.pipeline.Pipeline;
import us.codecraft.webmagic.processor.PageProcessor;

public class Demo {
    public static void main(String[] args) {
        HttpClientDownloader httpClientDownloader = new HttpClientDownloader();
        Spider.create(new MyPageProcessor())
                .addPipeline(new MyPipeline())
                .setDownloader(httpClientDownloader)
                .addUrl("http://www.sikiedu.com")
                .run();
    }
}

class MyPageProcessor implements PageProcessor{
    public void process(Page page) {
        Document document = page.getHtml().getDocument();
        Element span = document.select(".subtitle").get(0).previousElementSibling().select("span").get(0);
        String text = span.text();
        page.putField("title",text);
    }

    public Site getSite() {
        return new Site();
    }
}

class MyPipeline implements Pipeline{
    public void process(ResultItems resultItems, Task task) {
        String title = resultItems.get("title").toString();
        System.out.println("拿到标签"+title);
    }
}

使用Selectable抽取元素,链接发现,配置Site

package com.sihi.crawler.webmagic;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;

import java.util.List;

public class TestPageProcessor implements PageProcessor {
    public void process(Page page) {
        Html html = page.getHtml();
        //用xpath获取IP
        List<String> ipList = html.xpath("//table[@id='ip_list']//tbody//tr//td[2]//text()").all();
        System.out.println(ipList);
        //用css选择器获取端口号
        Selectable portList = html.css("#ip_list tbody tr td:nth-child{3}", "text");
        System.out.println(portList);
        //通过css选择器获取服务器地址,链接的发现
        List<String> links = html.css("#ip_list tbody tr td:nth-child(4)").links().regex(".*/2018.*").all();
        System.out.println(links);

        //进入连接循环调用这个方法
        page.addTargetRequests(links);
    }

//    对站点本身的一些配置信息,例如编码、HTTP头、超时时间、重试策略等、代理等,都可以通过设置Site对象
    private Site site = Site.me()
            .setCharset("UTF-8")
            .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75")
            .setTimeOut(3000)
            .setRetryTimes(3)
            .setSleepTime(5000)
            .addHeader("cookie","__root_domain_v=.zdaye.com; _qddaz=QD.azbaun.g9ezu7.kjtn2fn1; acw_tc=76b20f6a16107
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Java WebMagic是一个开源的Java爬虫框架,可以用于爬取网页数据,包括图片。它提供了简单易用的API,可以方便地定义爬取规则和处理爬取结果。 要使用Java WebMagic进行图片爬取,首先需要添加WebMagic的依赖到你的项目中。然后,你可以按照以下步骤进行操作: 1. 创建一个Java类,作为你的爬虫程序的入口点。 2. 在该类中,使用WebMagic提供的注解和API定义你的爬取规则。你可以指定要爬取的网页URL、要提取的图片链接等信息。 3. 实现一个自定义的处理器(Pipeline),用于处理爬取到的图片数据。你可以将图片保存到本地或者进行其他处理。 4. 创建一个爬虫对象,并设置好爬取规则和处理器。 5. 启动爬虫,开始爬取图片。 以下是一个简单的示例代码,演示了如何使用Java WebMagic进行图片爬取: ```java import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.pipeline.FilePipeline; import us.codecraft.webmagic.processor.PageProcessor; public class ImageSpider { public static void main(String[] args) { // 创建一个PageProcessor对象,用于定义爬取规则 PageProcessor pageProcessor = new MyPageProcessor(); // 创建一个Pipeline对象,用于处理爬取结果 FilePipeline filePipeline = new FilePipeline("保存图片的目录"); // 创建一个Spider对象,并设置好PageProcessor和Pipeline Spider spider = Spider.create(pageProcessor) .addUrl("要爬取的网页URL") .addPipeline(filePipeline); // 启动爬虫 spider.run(); } // 自定义的PageProcessor类,用于定义爬取规则 static class MyPageProcessor implements PageProcessor { @Override public void process(Page page) { // 提取图片链接,并将其添加到爬取队列中 page.addTargetRequests(page.getHtml().$("img[src]").all()); // 获取图片链接,并保存到结果中 page.putField("image", page.getHtml().$("img[src]").all()); } @Override public Site getSite() { return Site.me(); } } } ``` 请注意,上述示例代码中的"要爬取的网页URL"和"保存图片的目录"需要根据实际情况进行替换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值