编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

爬虫神器,WebMagic如何监控?(python爬虫监控)

wxchong 2024-09-22 16:45:26 开源技术 37 ℃ 0 评论

1 爬虫的监控

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

如果你完全不会JMX也没关系,因为它的使用相对简单,本章会比较详细的讲解使用方法。如果要弄明白其中原理,你可能需要一些JMX的知识,推荐阅读:JMX整理。我很多部分也对这篇文章进行了参考。

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

1.1 为项目添加监控

添加监控非常简单,获取一个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();

}

}

1.2 查看监控信息

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

我们按照4.6.1的例子启动程序,然后在命令行输入jconsole(windows下是在DOS下输入jconsole.exe)即可启动JConsole。

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

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

1.3 扩展监控接口

除了已有的一些监控信息,如果你有更多的信息需要监控,也可以通过扩展的方式来解决。你可以通过继承SpiderStatusMXBean来实现扩展。

2 配置代理

从0.7.1版本开始,WebMagic开始使用了新的代理APIProxyProvider。因为相对于Site的“配置”,ProxyProvider定位更多是一个“组件”,所以代理不再从Site设置,而是由HttpClientDownloader设置。

API

说明

HttpClientDownloader.setProxyProvider(ProxyProvider proxyProvider)

设置代理

ProxyProvider有一个默认实现:SimpleProxyProvider。它是一个基于简单Round-Robin的、没有失败检查的ProxyProvider。可以配置任意个候选代理,每次会按顺序挑选一个代理使用。它适合用在自己搭建的比较稳定的代理的场景。

代理示例:

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

HttpClientDownloader httpClientDownloader = new HttpClientDownloader();

httpClientDownloader.setProxyProvider(SimpleProxyProvider.from(new Proxy("101.101.101.101",8888,"username","password")));

spider.setDownloader(httpClientDownloader);

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

HttpClientDownloader httpClientDownloader = new HttpClientDownloader();

httpClientDownloader.setProxyProvider(SimpleProxyProvider.from(

new Proxy("101.101.101.101",8888)

,new Proxy("102.102.102.102",8888)));

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表