[Java爬虫-WebMagic]-02-获取网页源码

获取网页源码

程序入口Spider

Spider 一般写在Main方法里

它可以设置爬虫的配置,包括编码、抓取间隔、超时时间、重试次数等,也包括一些模拟的参数,例如User Agent、cookie,以及代理的设置

public static void main(String[] args) {
        //创建爬虫解析页面
        PageProcessor pageProcessor = new FirstWebmagic();
        //创建爬虫
        Spider spider = Spider.create(pageProcessor);
        //给爬虫添加爬取地址
        spider.addUrl("https://xiaoshuai.blog.csdn.net/");
        //启动一个线程
        spider.thread(1);
        //启动爬虫
        spider.run();
}

同时Spider的其他组件(Downloader、Scheduler、Pipeline)都可以通过set方法来进行设置。

方法说明示例
create(PageProcessor)创建SpiderSpider.create(new GithubRepoProcessor())
addUrl(String…)添加初始的URLspider .addUrl(“http://webmagic.io/docs/”)
addRequest(Request…)添加初始的Requestspider .addRequest(“http://webmagic.io/docs/”)
thread(n)开启n个线程spider.thread(5)
run()启动,会阻塞当前线程执行spider.run()
start()/runAsync()异步启动,当前线程继续执行spider.start()
stop()停止爬虫spider.stop()
test(String)抓取一个页面进行测试spider .test(“http://webmagic.io/docs/”)
addPipeline(Pipeline)添加一个Pipeline,一个Spider可以有多个Pipelinespider .addPipeline(new ConsolePipeline())
setScheduler(Scheduler)设置Scheduler,一个Spider只能有个一个Schedulerspider.setScheduler(new RedisScheduler())
setDownloader(Downloader)设置Downloader,一个Spider只能有个一个Downloaderspider .setDownloader(new SeleniumDownloader())
get(String)同步调用,并直接取得结果ResultItems result = spider .get(“http://webmagic.io/docs/”)
getAll(String…)同步调用,并直接取得一堆结果List results = spider .getAll(“http://webmagic.io/docs/”, “http://webmagic.io/xxx”)

编写PageProcessor

在WebMagic里,实现一个基本的爬虫只需要编写一个类,实现PageProcessor接口即可。这个类基本上包含了抓取一个网站,你需要写的所有代码。

下面来看一下这个接口里面有什么

/** 负责解析页面,抽取有用信息,以及发现新的链接 **/
public interface PageProcessor {

    /**
     * 处理页面,提取要提取的 URL,提取数据和存储
     *
     * @param Page page 页面信息
     */
    public void process(Page page);

    /**
     * 获取设置信息
     *
     * @return site
     * @see Site
     */
    public Site getSite();
}
Site 配置信息

对站点本身的一些配置信息,例如编码、HTTP头、超时时间、重试策略等、代理等,都可以通过设置Site对象来进行配置。

@Override
public Site getSite() {
    Site site = Site.me();//创建Site
    site.setTimeOut(1000);//设置超时
    site.setRetryTimes(3);//设置重试次数
    return site;
}
方法说明示例
setCharset(String)设置编码site.setCharset(“utf-8”)
setUserAgent(String)设置UserAgentsite.setUserAgent(“Spider”)
setTimeOut(int)设置超时时间,单位是毫秒site.setTimeOut(3000)
setRetryTimes(int)设置重试次数site.setRetryTimes(3)
setCycleRetryTimes(int)设置循环重试次数site.setCycleRetryTimes(3)
addCookie(String,String)添加一条cookiesite.addCookie(“dotcomt_user”,“code4craft”)
setDomain(String)设置域名,需设置域名后,addCookie才可生效site.setDomain(“github.com”)
addHeader(String,String)添加一条addHeadersite.addHeader(“Referer”,“https://github.com”)
setHttpProxy(HttpHost)设置Http代理site.setHttpProxy(new HttpHost(“127.0.0.1”,8080))
process 页面处理

process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑

所有抓取的信息都在这里

我们可以根据需要获取想要的结果

@Override
public void process(Page page) {
    //抓取到的页面为一个page对象
    Html html = page.getHtml();//我们从page里面获取Html信息
    System.out.println(html);//然后一个html源代码就输出到控制台了
}

一个完整的代码示例

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;

public class FirstWebmagic implements PageProcessor {

    @Override
    public void process(Page page) {
        //抓取到的页面为一个page对象
        Html html = page.getHtml();//我们从page里面获取Html信息
        System.out.println(html);//然后一个html源代码就输出到控制台了
    }

    @Override
    public Site getSite() {
        Site site = Site.me();//创建Site
        site.setTimeOut(1000);//设置超时
        site.setRetryTimes(3);//设置重试次数
        return site;
    }
    
    public static void main(String[] args) {
        //创建爬虫解析页面
        PageProcessor pageProcessor = new FirstWebmagic();
        //创建爬虫
        Spider spider = Spider.create(pageProcessor);
        //给爬虫添加爬取地址
        spider.addUrl("https://xiaoshuai.blog.csdn.net/");
        //启动一个线程
        spider.thread(1);
        //启动爬虫
        spider.run();

    }
}

在这里插入图片描述


上一篇[Java爬虫-WebMagic]-01-初识爬虫框架WebMagic
下一篇[Java爬虫-WebMagic]-03-解析Html源码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Timeless小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值