Skip to content

是否是FileCacheQueueScheduler的BUG #156

Open
@zhugw

Description

@zhugw

想这样设置抓取策略:抓取完后(通过scheduler.getLeftRequestsCount()==0判断)休眠24小时,然后重新抓取(从第二次及以后只抓取网站新增的内容),使用FileCacheQueueScheduler,跳过那些之前已抓取过的URL. 伪代码如下:
public void crawl(){
Spider spider = Spider.create()...;
spider.start();
whil(spider.getScheduler().getLeftRequestsCount()!=0) // 隔一秒判断一下是否已抓取完毕
Thread.sleep(1000);
//抓取完毕 休眠24小时
Thread.sleep(24_60_60*1000);
crawl(); //递归调用 重新抓取
}
测试过程中(测试程序中入口URL与TargetUrl一样), 发现虽然是重新从入口地址开始抓取, 但保存urls的那个文件,似乎并没有去重,同一url仍会不停的往里插入, 但文档中是这么说的:
Scheduler是WebMagic中进行URL管理的组件。一般来说,Scheduler包括两个作用:

对待抓取的URL队列进行管理。
对已抓取的URL进行去重。

故不知这算不算是bug?另外当前urls.txt文件中有三十几行均为同一URL,第一次调用crawl的时候,会有三十几个如下的日志:
INFO us.codecraft.webmagic.downloader.HttpClientDownloader(HttpClientDownloader.java:87) ## downloading page ***
注: ***表示那个URL
但第二次及以后调用时crawl时,均只有一条如上的日志.
而按我对文档中所描述的理解,urls.txt中应该不会存在同一url的多条记录,类似数据库中的唯一约束.若urls.txt中已存在该URL,应会跳过此URL,即不会再次抓取,那样的话,应该不会有downloading page的日志输出.
所以我现在对此scheduler的工作机制感到有些困惑,不知能否澄清一下?谢谢!

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions