我使用 Firefox,在加载的网站上查看和阅读英文文本没有任何问题。
如果我在 Firefox 中单击“保存”并将相关网页保存为文本文件,我可以读取文本文件中的所有内容 - 所有字符都是可读的。
然而,当我使用 Downthemall 保存这些相同的网页并将它们另存为 .html 时(这似乎是使用 Dta 的唯一方法),保存的 HTML 文件中存在无法读取的字符,而更关键的是它们是关键字符我有兴趣阅读和提取的行。 Firefox 查看源代码显示相同的不可读的输出。
基本上我正在尝试清理一个网站(yunfile.com)以收集文件名和下载链接 - 一切都会很好,除了我无法读取文件名。
这是一个示例链接:http://page3.dfpan.com/file/syg65488/0141cd27我遇到的问题是文件名行显示“正在下载”:
HTML 文件文本如下: ¡£¢¢£¥£¢½ãòá碽áòá
在 Firefox 中,相同的文本如下: 20110601.part1.rar
是否有可以运行的程序和命令来转换这些 HTML 文件?
任何建议将不胜感激。
答案1
这不是编码问题。发生的情况是,服务器返回文件名被破坏的 HTML,并且有一些 Javascript 来整理它们。
幸运的是,修改是由未隐藏或混淆的 JavaScript 执行的,因此很容易撤消它。 JS代码是
function codeAndEncode(_key,_str){
var keyUnicodeSum=0;
var codedStr = "";
for( j = 0; j<_key.length; j++ ){
keyUnicodeSum += _key.charCodeAt( j );
}
for( i = 0; i<_str.length; i++ )
{
var _strXOR = _str.charCodeAt(i) ^ keyUnicodeSum;
codedStr += String.fromCharCode( _strXOR );
}
return codedStr;
}
var filename = codeAndEncode("111", "ëúòüýúòý¡£¢¢£¥£¢½ãòá碽áòá");
这非常简单:计算一个值并将其与字符串的每个字符进行异或。重整和取消重整操作是相同的。您可以将其翻译成您用于抓取工具的任何语言。例如,下面是一些撤销损坏的 Perl 代码:
$ perl -CA -l -we 'my $sum = 0; $sum += ord foreach split //, $ARGV[0]; print $ARGV[1] ^ (chr($sum) x length($ARGV[1]))' 111 "ëúòüýúòý¡£¢¢£¥£¢½ãòá碽áòá"
xiaonian20110601.part1.rar
粉碎机使用DOM访问document.getElementById("file_show_filename")
并document.getElementById("file_down_filename")
识别 HTML 树中需要恢复的节点。您也可以将其适应您的抓取工具使用的任何 HTML 解析器。
修改文件名的目的是使抓取变得更加困难,因此站点管理员可能会随着时间的推移使修改变得更难重现。如果您想保留损坏的文件名,无论网站采取什么伎俩,您可以在自动化环境中运行 Firefox。看除了 SeleniumRC 之外,还有什么好的工具可以获取包含 JavaScript 后绘制内容的网页吗?和如何在 Linux 上无头运行 Firefox(即不需要 libgtk-x11-2.0.so.0)?