このサイトをミラーリングするときに wget がすべてのページを取得できないのはなぜですか

このサイトをミラーリングするときに wget がすべてのページを取得できないのはなぜですか

次の Web サイトを完全にミラーリングしたいです。翻訳元

次の wget コマンドを使用します。

wget -m http://tinaztitiz.com

この Web サイトはカスタム CMS であり、次の形式の URL を持つページが多数含まれています。

http://tinaztitiz.com/yazi.php?id=943
http://tinaztitiz.com/yazi.php?id=762

奇妙なことに、wget はこれらのページの一部を取得しますが、すべてを取得するわけではありません。この理由は何なのでしょうか?

注: robots.txt による制約はありません。

アップデート:

Web サイトのソース コードを見ると、wget によって検出およびクロールされないページには共通のプロパティがあることに気付きました。それらのアンカー URL は、次の JavaScript 関数によって記述されています。

function yazilar()
{
var ab = '</a><br class=\"hide\" />';
var aa = '<a class=' + '\"nav sub\" href=\"kategori.php?id=';
var ac = '';

var arr = new Array();
arr[0] = '12\">'+ac+' Belâgat';
arr[1] = '15\">'+ac+' Bilim ve Teknoloji';
//...
maxi = 14;
for(i=0;i<maxi;i++) {
    a = aa + arr[i] + ab;
    document.writeln(a);
    }
}

したがって、wget は動的に生成されたアンカー タグを検出できないようです。

答え1

Javascript はブラウザによってレンダリングされます。wgetコンテンツを取得するという、まさにその通りのことをします。ブラウザは最初に同じことを行います。上で投稿したとおりにコンテンツを取得します。しかし、その後、そのJavascript部分をレンダリングしてリンクを構築します。wgetそれはできません。つまり、wget だけを使用して動的に生成されたリンクを取得することはできません。次のようなものを試すことができます。ファントムJSけれど。

答え2

すでに述べたように、wgetはクライアントサイドJavaScriptコードを使用するページを生成することはできません。Pythonプログラミングの基礎を知っている場合は、Pythonライブラリを使用することをお勧めします。スクレイピーウェブサイトをクロールするために、セレンは、外部ブラウザを使用して動的なページを生成することができます。これはすべて、わずかなPythonコードで実現できます。たとえば、 コードスニペットコレクション

関連情報