/ 详情

在不去重场景下的问题

Done
owner
Opened this issue  
2016-01-22 10:01

如有Page没有配置成isUnique="1",会出现页面无限递归download的严重问题:

A 页面里存在 B, C 两个页面
B 页面存在 A, C 页面
C页面存在 A, B 页面

这时候如果不去重复,则会出现三个页面之间循环download的问题!

Comments (7)

要解决此问题,可尝试使用以下思路:

1. 每个URL对象都记录parent,children
2. 从URL对象里发现的新URL放到children
3. URL的来源放到parent

children增加以下规则约束:

1. 排除自己
2. 排除parent,递归排除

这样就能保证不出现循环依赖问题。验证场景如下:

现状:
A -> A,B,C,D
B -> A,B,C,D
C -> A,B,C,D
D -> A,B,C,D
排除自己:
A -> B,C,D
B -> A,C,D
C -> A,B,D
D -> A,B,C
排除parent
A -> B,C,D
B -> C,D
C -> A,D
D -> A,B
递归排除parent
A -> B,C,D
B -> C,D
C -> D
D -> 空

最后的结果就是我们想要的结果了!

最后落地到代码层面的话,就是每个DownloadTask里都保存着它所有的Parents, 不仅仅当前一层的parent,而是包括上层,上上层,上上上层,直到seed

Status changed to closed

Status changed to reopened

这里主要是要解决循环依赖,导致无限递归抓取的问题。

分支2.1-dev已解决。

Status changed to closed

Sign in to comment

状态
Assignees
Milestones
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
Branches
Planed to start   -   Planed to end
-
Top level
Priority
参与者(1)
117 l weiwei 1578913730