架构师

您现在的位置是:首页 > 程序人生 > 网络爬虫

网络爬虫

Java爬虫第7课:webmagic入门案例

架构师小跟班 2020-07-16 网络爬虫
加入依赖创建Maven工程,并加入以下依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org

加入依赖

创建Maven工程,并加入以下依赖

<?xml version="1.0" encoding="UTF-8"?>
<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.jiagou1216</groupId>
    <artifactId>crawler</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>

注意:0.7.3版本对SSL的并不完全,如果是直接从Maven中央仓库下载依赖,在爬取只支持SSL v1.2的网站会有SSL的异常抛出。

解决方案

1.等作者的0.7.4的版本发布

2.直接从github上下载最新的代码,安装到本地仓库

也可以参考以下资料自己修复:https://github.com/code4craft/webmagic/issues/701

日志配置

WebMagic使用slf4j-log4j12作为slf4j的实现。

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

案例实现

需要爬取的页面:

http://yun.itheima.com/course/c27.html?pc

页面源码:

package com.jiagou1216.crawler.test;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor;

import java.util.List;

public class CrawlerHandler implements PageProcessor {
    /**
     * 解析页面
     */
    public void process(Page page) {
        page.putField("title", page.getHtml().css("div.main h2 ").all());
        page.putField("pic",page.getHtml().css("img.mask_img1").all());
        //使用xpath抽取元素
        page.putField("url1",page.getHtml().xpath("//div[@class='main']/ul/li/a/@href").all());
        //使用$抽取元素
        page.putField("url2",page.getHtml().$(".main").$("a","href").all());
        //使用css抽取元素
        page.putField("url3",page.getHtml().css("div.main ul li").css("a","href").all());
    }

    private Site site = Site.me();

    public Site getSite() {
        return site;
    }

    /**
     * 执行爬虫,默认输出到控制台
     */
    public static void main(String[] args) {
        Spider.create(new CrawlerHandler())
                .addUrl("http://yun.itheima.com/course/c27.html?pc")
                .run();
    }

}

打印结果:

注意:

webmagic默认将解析结果输出到控制台,所以不加打印语句也可以在控制台中看到。

gethtml()...all()方法如果不加,只爬取匹配到的第一个元素。

文章评论