2012-04-20 2 views
0

저는 웹에서 스크래핑을하기 위해 Mechanize :: Firefox를 사용하고 있으며 현재 완전히 헤드리스로 진행되고 있습니다. 이 코드를 사용했습니다 :Perl DOM으로 웹 링크 찾기

my $link = [$firefox->find_link_dom(text_regex => qr/pdf/i)]->[0]->{href} . "\n"; 

.pdf 파일을 찾을 때 매우 좋은 결과를 제공합니다. 어쨌든 내가 브라우저를 보여줄 필요가없는 다른 모듈을 사용하여 text_regex에 기반한 링크 운명을 찾을 수 있습니까?

내가 같은 코드에서 링크를 다시 얻을 것 기계화 :: 파이어 폭스와

편집

:

<div id="rhc" xpathLocation="noDialog"> 

<div id="download" class="rhcBox_type1"> 
<div class="wrap"> 
    <ul> 
    <li class="download icon"><strong>Download:</strong> 
     <a href="/article/fetchObjectAttachment.action;jsessionid=CDBD1AACEEB3CF89729EB23808FD1319?uri=info%3Adoi%2F10.1371%2Fjournal.pbio.1001193&amp;representation=PDF" title="Download article PDF">PDF</a> | 
     <a href="/article/citationList.action;jsessionid=CDBD1AACEEB3CF89729EB23808FD1319?articleURI=info%3Adoi%2F10.1371%2Fjournal.pbio.1001193" title="Download citations">Citation</a> | 
     <a href="/article/fetchObjectAttachment.action;jsessionid=CDBD1AACEEB3CF89729EB23808FD1319?uri=info%3Adoi%2F10.1371%2Fjournal.pbio.1001193&amp;representation=XML" title="Download Article XML">XML</a> 
    </li> 
    <li class="print icon"><a href="#" onclick="window.print();return false;" title="Print Article"><strong>Print article</strong></a></li> 
    <li class="reprint icon"><a href="https://www.odysseypress.com/onlinehost/reprint_order.php?type=A&page=0&journal=1&doi=10.1371/journal.pbio.1001193&volume=&issue=&title=Evolutionarily Conserved Linkage between Enzyme Fold, Flexibility, and Catalysis&author_name=Arvind%20Ramanathan%2C%20Pratul%20K.%20Agarwal&start_page=1&end_page=17" title="Odyssey Press">EzReprint</a> New &amp; improved!</li> 
    </ul> 
</div> 

는 pdf 파일을 다운로드합니다. HTML :: Treebase가이 링크를 얻지 못하는 이유는 무엇입니까 ??

+1

하지만 자바 스크립트 수있는 렌더러를 가지고 페이지 구문 분석 (기존 코드가 작동하는 곳) – Quentin

답변

1
use strict; 
use warnings; 
use HTML::TreeBuilder::XPath qw(); 

my $dom = HTML::TreeBuilder::XPath->new_from_content(q(...)); # ... your html code 
my @nodes = $dom->findnodes('//a[contains(@href, "pdf")]'); 

foreach my $node (@nodes) { 
    my $href = $node->findvalue('@href'); 
    ... 
} 
당신은 머리가없는 남아 Xvfb가 파이어 폭스를 실행할 수 있습니다