day75,爬虫02,webmagic入门程序,组件介绍:Downloader,PageProcess,pipeline,Scheduler,51jop招聘网站综合案例

一、webmagic入门程序(原理图)
在这里插入图片描述
使用方法
1)创建工程
2)添加jar包

<dependencies>
        <!--WebMagic-->
        <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>
        <!--WebMagic对布隆过滤器的支持-->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>16.0</version>
        </dependency>
    </dependencies>
    
注意:0.7.3版本对SSL的并不完全,如果是直接从Maven中央仓库下载依赖,在爬取只支持SSL v1.2的网站会有SSL的异常抛出。
解决方案:
1.等作者的0.7.4的版本发布
2.直接从github上下载最新的代码,安装到本地仓库

课堂提供的本地仓库中是已经修复完成的,可以直接使用

3)创建一个PageProcess对象,需要实现PageProcessor接口创建实现类。
4)在实现类中实现页面解析的业务逻辑。和设置解析参数
public class MyPageProcessor implements PageProcessor {
   
    /**
     * 页面解析的业务逻辑
     * @param page 下载结果封装到Page对象中
     */
    public void process(Page page) {
   
        //抓取传智播客首页打印html
        Html html = page.getHtml();
        String strHtml = html.toString();
        //把解析结果传递给pipeline
        /*ResultItems resultItems = page.getResultItems();
        resultItems.put("html", strHtml);*/
        page.putField("html", strHtml);
        Selectable url = page.getUrl();
    }

    /**
     * 抓取站点信息的参数配置
     * 抓取的频率
     * 超时时间
     * 编码格式
     * 。。。
     * @return
     */
    public Site getSite() {
   
    	//没有设置参数,使用默认参数
        return Site.me();
    }
5)创建一个main方法,在方法中初始化爬虫并启动。
public static void main(String[] args) {
   
        Spider.create(new MyPageProcessor())
                //设置起始的url
                .addUrl("http://www.itcast.cn")
                //启动爬虫
                //同步方法,在当前线程中启动爬虫
                //.run();
                //异步方法,创建新的线程启动爬虫
                .start();
    }

二、组件介绍
1、Downloader组件
下载器组件,从互联网现在html页面,并封装成Page对象,传递给PageProcess组件。
就是使用HttpClient实现。
如果没有特殊需求,此组件无需自定义。
2、PageProcess组件
爬虫的核心组件,PageProcessor负责解析页面,抽取有用信息,以及发现新的链接,使用爬虫时,此组件 必须自定义。
1)Site
站点参数的配置。
抓取的间隔时间
超时时间
编码格式
UserAgent

一般情况下使用默认参数即可。
返回一个Site对象,使用Site.me();

具体修改代码参照:
private Site site = Site.me()
        .setCharset("UTF-8")//编码
        .setSleepTime(1)//抓取间隔时间
        .setTimeOut(1000*10)//超时时间
        .setRetrySleepTime(3000)//重试时间
        .setRetryTimes(3);//重试次数


在这里插入图片描述
2)Page,可以理解为分发器,把自己内部的属性,分发给响应组件。
Html:Downloader组件抓取的页面封装成Html对象。也是一个Selectable对象
url:当前页面对应的url地址,是一个Selectable对象
ResultItems:从PageProcess向pipeline传递数据的对象。
本质上就是一个map
Request:一个Request就是一个url。
page对象:
addTargetRequest:向队列中添加一个url
addTargetRequests:向队列中批量添加url

3)Selectable对象
	-- Html对象支持使用Jsoup原生api
	css选择器解析页面:
		css()、$()
	使用xpath解析页面:
		xpath()
		解析xml的一种方法。

	使用正则表达式
		regex()
		解析页面不推荐使用正则表达式。推荐使用css选择器。

*3.正则表达式
正则表达式则是一种通用的文本抽取语言。在这里一般用于获取url地址。
正则表达式学习难度要大一些,大家可以参考课堂资料《正则表达式系统教程.CHM》
下面的例子就是获取https://www.jd.com/moreSubject.aspx这个页面中
所有符合https://www.jd.com/news.\w+?.正则表达式的url地址
并将这些链接加入到待抓取的队列中去

	把Selectable对象转换成字符串:
		toString()、get()
			如果结果是一个列表的话,只取第一个元素。
		all()
			可以吧Selectable转换成字符串,转换成一个List<String>
		links()
			取当前节点中所有的链接地址。
		nodes()
			选择节点,返回一个List<Selectable>对象

在这里插入图片描述

public void process(Page page) {
   
        Html html = page.getHtml();
        //解析title
        Document document = html.getDocument();
        String title = document.select("title").text();
        //传递给pipeline
        page.putField("title", title);
        //使用css选择器解析
        Selectable selectable = html.css("title", "text");
        //String title2 = selectable.toString()
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值