2013-10-27 66 views
1

我目前正在从一个给定的URL拉回各种数据的程序。为此,我有一个通过URL梳理并从源代码构建所有位置的数组的函数。这工作完美,我已经设法过滤页面,以检查是否有文件,而不是在网页上等。检查两个URL是否是相同的页面

我的麻烦是我测试了这一点,有些菜单子菜单菜单下的菜单选项。导航栏中的主要选项将具有页面值,并且子导航上的第一个选项将是相同的页面,但在URL的末尾会有一个值(主要用于在JavaScript之间切换)。我尝试过对页面进行编码并对其进行比较(以缩短处理时间),但是在某些网站中将URL放入表单域。

Example: 

Option1 - www.example.com/page1 
- first opt - www.example.com/page1?t=1 
- second opt - ww.example.com/page1?t=2 

从某些网站使用这些值时,将不可能去除附加标签,而其他网页使用JS。由于这些网址在技术上有所不同,有没有办法检查这些网页是否相同,即使它们位于不同的网址上?

回答

1

在你的情况下,我建议你只检索标题并比较Content-Length标题。

function content_length($url){ 
    $ch = curl_init($url); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    curl_setopt($ch, CURLOPT_NOBODY, TRUE); 

    $data = curl_exec($ch); 
    $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); 

    curl_close($ch); 
    return $size; 
    } 

    function filterURL($url) { 
     // Make urls similar as possible. E.g. strip all after hash-symbol. 
     return substr($url, 0, strpos($url, "#")); 
    } 

    $url1 = 'http://example.com/page/?foo=1#bar'; 
    $url2 = 'http://example.com/page/?foo=2#bar2'; 

    if (content_length(filterURL($url1)) == content_length(filterURL($url1))) { 
     print "Same"; 
    } else { 
     print "Different"; 
     doWhatYouNeedToDo(); 
    } 

这并不能保证页面是不一样的,但它并不要求你下载整个页面。

+0

这是一些辉煌的解决方案,不幸的是在这个例子中它不起作用。由于www.example.com/page1与www.example.com/page1?t=1是相同的页面,但是?t = 1对代码有额外的3个章程,所以假设是不正确的 – Veljex

+0

如果您的意思是3个字符在页面的html代码中 - 是的,/ page1和page1?t = 1会被认为是不同的。因为他们真的不同。也许它们对于人类来说是相似的,但对于无灵魂的机器来说却不一样。 另一方面,我猜这在现实世界中并不是什么大不了的事情,因为我无法想象哪些页面可能有一些差异,但它们真的是相同的情况(统计错误之外)。 我的意思是,网站引擎如何生成两个双页面,以及为什么其中一个会包含一些代码错误(因为如果内容会不同,即使对于人来说页面也会不同)? –