为什么 wget 在镜像此站点时无法获取所有页面

为什么 wget 在镜像此站点时无法获取所有页面

我想要完全镜像以下网站:http://tinaztitiz.com

我使用以下 wget 命令:

wget -m http://tinaztitiz.com

该网站是一个自定义 CMS,包含许多具有以下 URL 形式的页面:

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 获取动态生成的链接。您可以尝试类似幻影JS尽管。

答案2

如前所述,wget 无法生成使用客户端 JavaScript 代码的页面。如果你了解 Python 编程的基础知识,我建议使用 Python 库刮擦用于抓取网站,包括,它能够使用外部浏览器生成动态页面。您可以使用少量 Python 代码完成所有这些操作。例如,请参阅 代码片段集合

相关内容