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 に答える