我目前正在开发一个从给定 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,因此无法从表面上去除附加标签。由于 URL 在技术上是不同的,有没有一种方法可以检查页面是否相同,即使它们位于不同的 URL 上?
最佳答案
在您的情况下,我可能建议您只检索 header 并比较 Content-Length header 。
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();
}
这不能保证页面相同或不同,但不要求您下载整个页面。
关于javascript - 检查两个 URL 是否是同一个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19622768/