為什麼 wget 鏡像此網站時無法取得所有頁面

為什麼 wget 鏡像此網站時無法取得所有頁面

我想完全鏡像以下網站:http://tinaztitiz.com

我使用以下 wget 命令:

wget -m http://tinaztitiz.com

網站是一個自訂 CMS,包含許多具有以下網址形式的頁面:

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

奇怪的是,wget 取得了其中一些頁面,但不是全部。我想知道這可能是什麼原因?

注意:robots.txt 沒有任何限制。

更新:

查看網站的源代碼,我注意到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 來獲取動態生成的連結。你可以嘗試類似的東西PhantomJS儘管。

答案2

如前所述,wget 無法產生使用客戶端 JavaScript 程式碼的頁面。如果您了解 Python 程式設計的基礎知識,我建議使用 Python 程式庫刮痧用於抓取網站,以及碳粉匣,它能夠使用外部瀏覽器產生動態頁面。您可以使用少量的 Python 程式碼來完成這一切。請參閱範例 程式碼片段集合

相關內容