我希望有人可以帮我解决这个问题。我正在用PHP编写一个蜘蛛应用程序,它编译来自域的唯一URL列表,处理每个唯一URL上的HTML数据,然后生成有关这些页面的统计数据。
我的问题与知道我抓到的网址是否真正属于我的列表,更具体地说,当参数值不同时,我的问题有关。
例如,以下是我的蜘蛛收集的两个技术上唯一的URL(“replytocom”的参数值不同),但也指向同一页面:
这些链接是您在博客上找到的那种链接,可以在使用相同的响应表单时更轻松地回复特定注释。这就是我的问题所在:它们都是同一页面的URL,这是我不想重新处理的数据(我真的只想要原始页面的URL进行处理)。对于在所有评论部分中使用这些链接的博客,这对我的蜘蛛来说是个大数据问题。
我的问题是:有没有办法判断具有不同参数值的两个链接是否引用同一页面?令我疑惑的是,例如,具有不同参数值的YouTube视频实际上意味着不同的页面。如果没有自己打开页面并检查,是否有一种编程方式来判断两个URL是否正在加载同一页面?
我真的很感激你的帮助!
答案 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;
}