webMagic 全面剖析(更新中。。。)

WebMagic爬虫主要由Downloader,PageProcessor,Pipelines,scheduler四个主要的部分构成。总调度类为Spider,主要负责请求任务分发,控制多个线程同时对多个网页进行下载,解析,存储。本文会针对这五个部分进行详细的代码剖析。

1.Downloader

1.1 Downloader接口

public interface Downloader {
   
    /**
     * Downloads web pages and store in Page object.
     *
     * @param request request
     * @param task task
     * @return page
     */
    public Page download(Request request, Task task);

    /**
     * Tell the downloader how many threads the spider used.
     * @param threadNum number of threads
     */
    public void setThread(int threadNum);
}

Downloader接口声明了两个方法,最主要的方法是download,针对参数request,下载相应的页面,将下载内容等用Page对象封装,并返回,以供PageProcessor处理。download还有个task参数,这个参数用来提供下载页面时的一些参数配置。setThread方法并不是必须的,但是WebMagic使用了Httpclient来实现Downloader,HttpClient可以实现一个客户端控制多个HTTP请求,从而避免多次的创建HttpClient,节省内存空间。所以WebMagic声明setThread方法。具体的实现我会在HttpClientDownloader中说明。

1.2 AbstractDownloader抽象类

继承Downloader接口,但是新添加如下四个方法

 /**
     * A simple method to download a url.
     *
     * @param url url
     * @return html
     */
    public Html download(String url) {
        return download(url, null);
    }

    /**
     * A simple method to download a url.
     *
     * @param url url
     * @param charset charset
     * @return html
     */
    public Html download(String url, String charset) {
        Page page = download(new Request(url), Site.me().setCharset(charset).toTask());
        return (Html) page.getHtml();
    }
    protected void onSuccess(Request request) {
    }

    protected void onError(Request request) {
    }

这里不多做介绍,这四种方法对于整个爬虫的影响不大,尤其是第三,和第四个方法,暂时并没有搞清楚其作用是什么。

1.3 HttpClientDownloader类

这个类是实现了Downloader接口的类。它主要是借助HttpClient第三方包来实现HTTP请求,和对HTTP响应的处理,从而将相应页面的源码下载下来。当然HttpClientDownloader是有局限的,其短板是不能处理动态页面。该类中的httpClientGenerator对象负责HTTPClient的生成,httpClients对象存储不同域的HTTPClient

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值