2017-02-22 3 views
0

Ich führe ein Projekt für einen Kunden und er muss in der Lage, das Inhaltsverzeichnis auf einer bestimmten Seite zu fegen. Ich habe seinen vorhandenen Code geändert, um eine Schleife auszuführen, da jetzt mehrere Seiten vorhanden sind, aus denen Inhalt extrahiert werden kann. Eine der Seiten, die ich versuche zu fegen: https://marriage.ag.gov.au/marriagecelebrants/civilAJAX klicken Sie auf die Schaltfläche mit Perl WWW: Mechanize

Sie können sehen, es gibt 162 Seiten, die auf AJAX läuft, um die nächste Menge Inhalt zu laden. Der vorhandene Code würde auf Eingabenamensattribut klicken basiert:

ctl00 $ $ maincontent gridCelebrants $ ctl00 $ ctl02 $ ctl00 $ ctl04 bisher alle meine Code tut, ist im Wesentlichen die Seite aktualisieren und fegt den gleichen Inhalt 162 mal.

Dies ist ein aktueller Auszug:

use warnings; 
use WWW::Mechanize; 
use Data::Dumper; 
use HTML::TableExtract; 
use Spreadsheet::WriteExcel; 

#header(); 
# create max page array to handle civil and other page. 
# number indicates how many times to click through 
# first item in array is https://marriage.ag.gov.au/marriagecelebrants/civil 
# second item is   https://marriage.ag.gov.au/marriagecelebrants/other 
my @max_page_array = qw(
    162 
    11 
); 

# create URL array for the 2 pages to scrape 
my @url_array = qw(
    https://marriage.ag.gov.au/marriagecelebrants/civil 
    https://marriage.ag.gov.au/marriagecelebrants/other 
); 
# get size of array 
my $url_array_size = scalar @url_array; 

# declare vars 
my $n = 0; 
my $i = 0; 
# time to loop through the url's 
while($i < $url_array_size){ 
    open (raw, ">output-dev-$i.txt"); 
    close(raw); 
    $n = 0; 
    my $mech = WWW::Mechanize->new(autocheck => 1); 
    $mech->get($url_array[$i]); 

    open (raw, ">>output-dev-$i.txt"); 
    while($n < $max_page_array[$i]){ 
     my $c = $mech->content; 
     my $te = HTML::TableExtract->new(br_translate => 1,keep_html => 0); 
     $te->parse($c); 
     foreach my $ts ($te->tables) { 
      foreach my $row ($ts->rows) { 
       print raw join(',', @$row); 
      } 
     } 

     #this was existing code 
     #$mech->click("ctl00\$MainContent\$gridCelebrants\$ctl00\$ctl02\$ctl00\$ctl04"); 

     #tried multiple variations based on documentation and got nowhere 
     $mech->click_button('ctl00$MainContent$gridCelebrants$ctl00$ctl02$ctl00$ctl04'); 
     $n++; 
    } 
    close raw; 
    $i++; 
} # while loop - url array size 

Meine Frage ist, wenn Sie die nächste klicken, wie kann ich meinen Perl-Skript bekommen, um die nächste Seite zu laden und im nächsten Satz von Daten fegen?

Antwort

0

Meine Frage ist, wenn Sie weiter klicken, wie kann ich mein Perl-Skript erhalten, um die nächste Seite zu laden und nächsten Datensatz zu fegen?

unterstützt kein JavaScript, wie unter the FAQ. Es bietet eine list of alternatives das tun, siehe auch WWW::Mechanize::PhantomJS.

Verwandte Themen