609 Star 2.1K Fork 746

自风 / Spiderman2

 / 详情

在不去重场景下的问题

已完成
拥有者
创建于  
2016-01-22 10:01

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

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

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

评论 (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

状态更改为 已关闭

状态更改为 重新打开

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

分支2.1-dev已解决。

状态更改为 已关闭

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
117 l weiwei 1578913730
Java
1
https://gitee.com/l-weiwei/Spiderman2.git
git@gitee.com:l-weiwei/Spiderman2.git
l-weiwei
Spiderman2
Spiderman2

搜索帮助