织梦二次开发

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1792|回复: 3

求助关于采集过滤重复链接的问题

  [复制链接]

1

主题

2

帖子

131

积分

童生

Rank: 3Rank: 3

金币
20
贡献
109
发表于 2016-4-18 15:06:39 | 显示全部楼层 |阅读模式
问题背景:
我在用织梦的采集功能采集一个网站首页的一个列表。

遇到问题:
这个列表中偶尔会有重复的文章(同链接地址),采集时,织梦采集默认应该是有过滤重复链接的机制,采集结果只保留了唯一链接。

我想要的:
我需要知道哪一篇重复了,所以希望它默认不要过滤掉重复链接,即采集结果与目标页面相同,重复就重复。

不懂php代码,找不到这个“过滤重复链接”的机制怎么去掉,希望站长帮帮忙,谢谢。

回复

使用道具 举报

1046

主题

1109

帖子

5334

积分

超级版主

Rank: 8Rank: 8

金币
256
贡献
3959
发表于 2016-4-18 18:41:55 | 显示全部楼层
要把这个问题弄明白,首先得研究透彻织梦是如何获取网址的,大体原理如下:

  织梦先把我们设置的要采集的网址,也就是“列表网址获取规则”,根据这个生成一系列网址,用到的程序是在/include/dedecollection.func.php里面的函数GetUrlFromListRule($regxurl='',$handurl='',$startid=0,$endid=0,$addv=1,$usemore=0,$batchrule=''),在这个函数里面有这样一这段代码:

  1.                 while($startid <= $endid)
  2.                 {
  3.                     $lists[$n][0] = str_replace("(*)",sprintf('%0'.strlen($startid).'d',$startid),$regxurl);
  4.                     $lists[$n][1] = 0;
  5.                     $startid = sprintf('%0'.strlen($startid).'d',$startid + $addv);
  6.                     $n++;
  7.                     if($n>2000 || $islisten==1)
  8.                     {
  9.                         break;
  10.                     }
  11.                 }
复制代码
  这段代码的作用就是生成这样一系统网址:

   

采集网址

采集网址


  经过很多文件处理后,程序就会根据“文章网址匹配规则”,查到目标网站的,找到对应的块,例如,文章网址匹配规则为:
1.png

  到对应的块去根据上面生成的网址,进行查找网页,进行采集。

   你说的那个机制问题就在这个查找处理上:对应的类文件是“采集处理类”文件,即 /include/dedehtml2.class.php

    这个文件里面有一个处理网址的方法(函数):

   解析HTML函数: Analyser()

  就是这个函数来处理的。

   接着来看这个函数打开这样一段代码:
  1.                     else if($tagName=='a')
  2.                     {
  3.                         $this->InsertLink($this->FillUrl($cAtt->GetAtt('href')),$this->GetInnerText($i,'a'));
  4.                     }
复制代码
这里面又涉及到二个方法(函数):

   分析连接函数:InsertLink($url, $atitle)
   补全相对网址函数:FillUrl($cAtt->GetAtt('href')

    要让同样的连接也采集,改这个东西比较麻烦,牵涉到底层,改的php文件比较多,你自己研究一下吧。
   
    其实,你说的好个机制没有那东西,织梦就是根据你设置的规则,也就是设置的批量生成的网址,去目标站搜索然后进行采集。






回复 支持 反对

使用道具 举报

1

主题

2

帖子

131

积分

童生

Rank: 3Rank: 3

金币
20
贡献
109
 楼主| 发表于 2016-4-18 21:06:59 | 显示全部楼层
谢谢你这么详细的解答,不过我还是不明白,为什么重复的链接就略过了不采集。。
回复 支持 反对

使用道具 举报

1046

主题

1109

帖子

5334

积分

超级版主

Rank: 8Rank: 8

金币
256
贡献
3959
发表于 2016-4-18 22:31:55 | 显示全部楼层
包子 发表于 2016-4-18 21:06
谢谢你这么详细的解答,不过我还是不明白,为什么重复的链接就略过了不采集。。

如果研究一下函数SetSource(&$html, $url = '', $linktype='')的话,确实他没有做什么处理,就是把列表页有连接的那一块拿过来,把里面的一个一个的a标签进行分析处理,放到对应的数组里面。

   你把你的采集的目标站和你的采集规则发我,我测试测试,网上找了很多站,没有找到像你说的一个站连接完全相同的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|织梦二次开发

GMT+8, 2019-4-25 22:18 , Processed in 0.385701 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表