저는 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", "ëúòüýúòý¡£¢¢£¥£¢½ãòá碽áòá");
매우 간단합니다. 값을 계산하고 이를 문자열의 각 문자와 XOR합니다. 형태 변경 및 형태 취소 작업은 동일합니다. 크롤러에 사용하는 모든 언어로 번역할 수 있습니다. 예를 들어, 다음은 실행 취소 손상된 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복원해야 하는 HTML 트리의 노드에 액세스 document.getElementById("file_show_filename")
하고 식별합니다. document.getElementById("file_down_filename")
또한 크롤러가 사용하는 HTML 파서에 맞게 조정할 수도 있습니다.
파일 이름을 수정하는 목적은 크롤링을 더 어렵게 만드는 것이므로 사이트 관리자는 시간이 지남에 따라 수정 사항을 재현하기 더 어렵게 만들 수 있습니다. 웹사이트가 어떤 트릭을 사용하더라도 손상된 파일 이름을 보존하려면 자동화된 환경에서 Firefox를 실행할 수 있습니다. 바라보다SeleniumRC 외에 JavaScript 그리기 후 콘텐츠가 포함된 웹 페이지를 얻을 수 있는 좋은 도구가 있습니까?그리고Linux에서 Firefox 헤드리스를 실행하는 방법(예: libgtk-x11-2.0.so.0이 필요 없음)?