Webmagic 爬虫监控和配置代理

JAVA herman 3876浏览 0评论

现在的服务基本上都离不开监控。Webmagic 爬虫框架自带了监控功能,本文将带领大家使用 Webmagic 爬虫的监控功能。

Webmagic 爬虫的监控是0.5.0新增的功能。利用这个功能,可以查看爬虫的执行情况——已经下载了多少页面、还有多少页面、启动了多少线程等信息。该功能通过JMX实现,你可以使用Jconsole等JMX工具查看本地或者远程的爬虫信息。

注意: 如果你自己定义了Scheduler,那么需要用这个类实现MonitorableScheduler接口,才能查看“LeftPageCount”和“TotalPageCount”这两条信息。

为爬虫项目添加监控

添加监控非常简单,获取一个SpiderMonitor的单例SpiderMonitor.instance(),并将你想要监控的Spider注册进去即可。你可以注册多个Spider到SpiderMonitor中。

public class MonitorExample {
    public static void main(String[] args) throws Exception {
        Spider oschinaSpider = Spider.create(new OschinaBlogPageProcessor())
                .addUrl("http://my.oschina.net/flashsword/blog");
        Spider githubSpider = Spider.create(new GithubRepoPageProcessor())
                .addUrl("https://github.com/code4craft");
        SpiderMonitor.instance().register(oschinaSpider);
        SpiderMonitor.instance().register(githubSpider);
        oschinaSpider.start();
        githubSpider.start();
    }
}

查看监控信息

WebMagic的监控使用JMX提供控制,你可以使用任何支持JMX的客户端来进行连接。我们这里以JDK自带的JConsole为例。我们首先启动WebMagic的一个Spider,并添加监控代码。然后我们通过JConsole来进行查看。

启动程序,然后在命令行输入jconsole(windows下是在DOS下输入jconsole.exe)即可启动JConsole。

Jconsole 监控 WebMagic 爬虫

这里我们选择启动WebMagic的本地进程,连接后选择“MBean”,点开“WebMagic”,就能看到所有已经监控的Spider信息了!

这里我们也可以选择“操作”,在操作里可以选择启动-start()和终止爬虫-stop(),这会直接调用对应Spider的start()和stop()方法,来达到基本控制的目的。

java 监视和管理控制台

扩展监控接口

除了已有的一些监控信息,如果你有更多的信息需要监控,也可以通过扩展的方式来解决。你可以通过继承SpiderStatusMXBean来实现扩展,具体例子可以看这里: 定制扩展demo

WebMagic 配置代理

从0.4.0版本开始,WebMagic开始支持Http代理。因为场景的多样性,代理这部分API一直处于不稳定状态,但是因为需求确实存在,所以WebMagic会继续支持代理部分的完善。目前发布的API只是beta版,后续API可能会有更改。代理相关的设置都在Site类中。

API 说明
Site.setHttpProxy(HttpHost httpProxy) 设置单一的普通HTTP代理
Site.setUsernamePasswordCredentials(UsernamePasswordCredentials usernamePasswordCredentials) 为HttpProxy设置账号密码
Site.setHttpProxyPool(List\ httpProxyList, boolean isUseLastProxy) 设置代理池

设置单一的普通HTTP代理为101.101.101.101的8888端口,并设置密码为"username","password"

site.setHttpProxy(new HttpHost("101.101.101.101",8888))
    .setUsernamePasswordCredentials(new UsernamePasswordCredentials("username","password"))

设置代理池,其中包括101.101.101.101和102.102.102.102两个IP

List<String[]> poolHosts = new ArrayList<String[]>();
poolHosts.add(new String[]{"username","password","101.101.101.101","8888"});
poolHosts.add(new String[]{"username","password","102.102.102.102","8888"});
//httpProxyList输入是IP+PORT, isUseLastProxy是指重启时是否使用上一次的代理配置
site.setHttpProxyPool(poolHosts,false);

0.6.0版本后,允许实现自己的代理池,通过扩展接口ProxyPool来实现。目前WebMagic的代理池逻辑是:轮流使用代理池中的IP,如果某个IP失败超过20次则增加2小时的重用时间,具体实现可以参考SimpleProxyPool。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » Webmagic 爬虫监控和配置代理