如何确定具有不同参数值的URL是否“唯一”?

时间:2013-08-05 15:12:54

标签: web-crawler

我希望有人可以帮我解决这个问题。我正在用PHP编写一个蜘蛛应用程序,它编译来自域的唯一URL列表,处理每个唯一URL上的HTML数据,然后生成有关这些页面的统计数据。

我的问题与知道我抓到的网址是否真正属于我的列表,更具体地说,当参数值不同时,我的问题有关。

例如,以下是我的蜘蛛收集的两个技术上唯一的URL(“replytocom”的参数值不同),但也指向同一页面:

这些链接是您在博客上找到的那种链接,可以在使用相同的响应表单时更轻松地回复特定注释。这就是我的问题所在:它们都是同一页面的URL,这是我不想重新处理的数据(我真的只想要原始页面的URL进行处理)。对于在所有评论部分中使用这些链接的博客,这对我的蜘蛛来说是个大数据问题。

我的问题是:有没有办法判断具有不同参数值的两个链接是否引用同一页面?令我疑惑的是,例如,具有不同参数值的YouTube视频实际上意味着不同的页面。如果没有自己打开页面并检查,是否有一种编程方式来判断两个URL是否正在加载同一页面?

我真的很感激你的帮助!

4 个答案:

答案 0 :(得分:2)

网页supposed to包含<meta rel="canonical">标记,可以为您回答此问题 如果存在,这将指定此页面的“官方”URL;对于同一页面的不同网址,它应该是相同的。

如果没有这个标签,那你就不走运了。

答案 1 :(得分:1)

不,没有办法说出来。参数(在?之后和#之前)被传递到Web服务器,由Web服务器决定它们对它们的影响,以及它们是否会影响返回的页面。 / p>

#之后的部分未提供给服务器,并且不会影响服务器返回的HTML,但JavaScript可能会使用它来修改用户看到的页面。)< / p>

答案 2 :(得分:0)

不,即使您的示例正在更改页面,以便表单标识您单击了要回复的人。

网络服务器可以根据您在请求中传递的参数(?之后和#之前的项目)执行喜欢的操作。

#之后的字符串表示浏览器应滚动到的页面上的锚点。

答案 3 :(得分:0)

这应该有效

function PagesAreIdentical($pointer1, $pointer2) {
    $headerArray1 = get_headers($pointer1);
    $headerArray2 = get_headers($pointer2):
    if($headerArray1['Content-Length'] == $headerArray2['Content-Length'])
    {
        if(file_get_contents($pointer1) != file_get_contents($pointer2))
            return false;
        else
            return true;
    }

    else return false;
}