webmagic 使用 RedisSchedule 问题

宿舍楼顶 发布于 2016/04/05 15:59
阅读 1K+
收藏 1

@黄亿华 你好,想跟你请教个问题:

您好,先说明下情况,我用您的webmagic做了一个毕设,现在在单机模式下运行没问题,目前程序也获取了10W多的商品数据,为了求得更好的效果,现在我想将该应用部署到多台机器中,所以打算将程序中的 QueueScheduler() 换成 RedisScheduler();

程序入口如下:


SpiderSchedule spider = new SpiderSchedule();
		Spider jdSpider = Spider.create(spider).addUrl("http://www.jd.com")
		.thread(20)
                //注释是用QueueScheduler()的情况,该情况下在单机模式下能正常运行,也能获取数据
		//.setScheduler(new QueueScheduler().setDuplicateRemover(new BloomFilterDuplicateRemover(100000000))) 
		.setScheduler(new RedisScheduler("192.168.12.153", 12002))
		.addPipeline(new ConsolePipeline());
		jdSpider.start();


按照上面程序入口去执行(就是换成RedisScheduler),程序运行结果如下:


[INFO ] 2016-04-05 15:14:09,801 method:us.codecraft.webmagic.Spider.run(Spider.java:307)
Spider www.jd.com started!



之后程序就停止了,没报错误,我程序中的RedisSchedule的代码是copy您博文  使用webmagic构建一个分布式的爬虫 的,我调试发现poll() 拿到的url==null; 


我的redis是在Ubuntu14中启动的, 然后我在RedisShedule类中加了一个方法在该类的mian方法里面去测试,该方法如下:

public void testJedis() {
		System.out.println(pool.getResource().set("url", "hello world"));
		System.out.println("rpush : "+pool.getResource().rpush("task_jd", "www.jd.com"));
		System.out.println("zadd  : "+pool.getResource().zadd("set_jd", System.currentTimeMillis()
				, "www.jd.com"));
		System.out.println("lpop : " + pool.getResource().lpop("task_jd"));
	}



测试结果是该方法正常运行的,能成功连接redis服务并get/set。

我也尝试看了您webmagic的源码,目前以我的实力还看不懂吧(菜鸟一枚),绕来绕去我自己都不知道看到哪里了,很多我明明认为是那样的,但是结果却是不是我想的那样


说得有点乱,说了那么多就一点:原先我程序正常的,用的是QueueSschedule(), 现在我要用RedisScheduler() ,按照我想的是开启redis,之后在程序入口代码那边换成RedisScheduler就可以了,但是目前出现了错误,我不知道怎么解决,所以来这里请教您

最后,感谢您能看完这个问题


刚才我换了个url去执行,执行几次,发现每次的执行结果都不一样,大概就是有时候多输出几条类似下面的log,有时候就少,下面的log输出是刚才执行中输出最多的那次

[INFO ] 2016-04-05 16:13:29,211 method:us.codecraft.webmagic.Spider.run(Spider.java:307)
Spider www.jd.com started!
[INFO ] 2016-04-05 16:13:29,221 method:us.codecraft.webmagic.downloader.HttpClientDownloader.download(HttpClientDownloader.java:87)
downloading page http://order.jd.com/center/list.action
[INFO ] 2016-04-05 16:13:29,222 method:us.codecraft.webmagic.downloader.HttpClientDownloader.download(HttpClientDownloader.java:87)
downloading page http://vip.jd.com/
[INFO ] 2016-04-05 16:13:29,222 method:us.codecraft.webmagic.downloader.HttpClientDownloader.download(HttpClientDownloader.java:87)
downloading page http://home.jd.com/
[INFO ] 2016-04-05 16:13:29,224 method:us.codecraft.webmagic.downloader.HttpClientDownloader.download(HttpClientDownloader.java:87)
downloading page http://b.jd.com/
[INFO ] 2016-04-05 16:13:29,225 method:us.codecraft.webmagic.downloader.HttpClientDownloader.download(HttpClientDownloader.java:87)
downloading page http://app.jd.com/



之后程序就一直卡着,不停止,也没其他输出





加载中
返回顶部
顶部