1

我目前正在开发一个从给定 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 上?

4

1 回答 1

2

在您的情况下,我可能建议您仅检索标头并比较 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();
    }

这并不保证页面相同或不同,但并不要求您下载整个页面。

于 2013-10-27T20:19:45.317 回答