웹 사이트에서 내용을 긁어 내기 위해 Perl의 WWW :: Mechanize 라이브러리를 사용하고 있습니다. 그러나 웹 페이지의 원본 HTML 소스 코드와 WWW :: Mechanize에서 파싱 된 내용이 다르다는 것을 알았습니다. 결과적으로 내 스크립트의 일부 기능이 손상됩니다.Perl WWW :: Mechanize 구문 분석 콘텐츠 문제?
그래서, 여기에 스크립트 (일부 단지 오류/문제를 설명하기)
#! /usr/bin/perl
use WWW::Mechanize;
use warnings;
$mech=WWW::Mechanize->new();
$mech->stack_depth(0);
$url="http://www.example.com";
$mech->get($url);
print $mech->content;
짧고 간단한 코드, 그것은 웹 사이트에 연결하고 전체 HTML 페이지를 검색합니다.
스크립트를 실행하고 출력을 텍스트 파일로 리디렉션하여 분석 할 수 있도록합니다. 나는 source_code.txt과 브라우저 (파이어 폭스)에 의해 표시되는 웹 사이트의 실제 소스 코드를 비교할 때
perl test.pl >> source_code.txt
지금, 차이가있다. 예를 들어
:
<tr>
<td nowrap="nowrap">This is Some Text</td>
<td align="right"><a href="http://example.com?value=key">Some more Text</a></td>
</tr><tr>
위의 소스 코드를 브라우저에서 관찰되는 것입니다.
그러나, 텍스트 파일, source_code.txt (WWW : : 기계화에 의해 생성) (페이지 소스보기 기능)
가 보여줍니다
<tr>
<td nowrap="nowrap">This is some text</td>
<td align="right">This is some more text</td>
</tr><tr>
당신이 볼 수 있듯이, 앵커 태그를 두 번째 태그 집합 사이에 중첩 된 태그가 삭제되었습니다.
이것은 알려진 문제이거나 $ mech-> content 이외의 다른 것을 사용하여 소스 코드를 볼 필요가 있습니까?
감사합니다.
User-Agent가 서버에서 반환 한 내용과 차이가 나는지 먼저 확인합니다. 'agent => 'Windows IE 6'을'new()'호출에 추가하면 어떻게 될까요? – LHMathies