代码拉取完成,页面将自动刷新
ResultTask#getKey方法如下:
public String getKey() {
return "result_" + result.getPageName() + "#" + result.getModelName() + "#" + getSeed().getUrl() + "#" + getRequest().getUrl();
}
这时,如果抽取一个列表页(如CSDN的博客列表页),每个列表项是一个Model对象,这时getKey方法对这个页面所有的Model封装成的ResultTask对象都返回同一个值,这时,所有列表项,只有第一个会加入到TaskManager#resultQueue。我的解决方案如下:
public String getKey() {
return "result_" + result.getPageName() + "#" + result.getModelName() + "#" + getSeed().getUrl() + "#" + getRequest().getUrl() + "#" + result.getFields();
}
加入field元素,而且是所有的field组成的字符串。这时,如果一个模型对象的所有field都一样的话,就没有二次抽取的必要了,如果有一点不一样的话,就不会被当做重复的了。