Este não é um problema de codificação. O que está acontecendo é que o servidor retorna HTML com os nomes dos arquivos desconfigurados, e há um pouco de Javascript para soltá-los.
Felizmente, a confusão é executada por Javascript que não está oculto ou ofuscado, por isso é fácil desfazê-lo. O código 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", "ëúòüýúòý¡£¢¢£¥£¢½ãòá碽áòá");
Isso é bem simples: calcule um valor e xor com cada caractere da string. A operação mangling e unmangling é a mesma. Você pode traduzir isso em qualquer idioma que estiver usando para o seu raspador. Por exemplo, aqui está um código Perl que desfaz a confusão:
$ 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
O mangler usa o DOM acessa document.getElementById("file_show_filename")
e document.getElementById("file_down_filename")
para identificar os nós na árvore HTML que precisam ser solto. Você pode adaptar isso também para qualquer analisador de HTML usado pelo seu raspador.
O objetivo de desmembrar os nomes dos arquivos é dificultar a tarefa de raspagem, por isso é provável que os administradores do site dificultem a reprodução da tarefa ao longo do tempo. Se você quiser manter os nomes dos arquivos desconfigurados, independentemente dos truques que o site receber, você poderá executar o Firefox em um ambiente automatizado. Veja Existe algum boas ferramentas além do SeleniumRC que podem buscar páginas da Web incluindo conteúdo pós-pintado por JavaScript? e Como posso executar o Firefox no Linux sem problemas (ou seja, sem exigir o libgtk-x11-2.0.so.0)?