2017-06-29 4 views
-3

Normalerweise mache ich Scraper in Ruby, aber entscheide dich in Perl. Und wenn ich mein Skript ausführe, sehe ich die Nummer der URL, die sich sehr, sehr langsam öffnet. Und ich danke, vielleicht sein Redirect-Problem? Oder vielleicht seine JS-URLs deshalb Problem. Und ich entscheide mich, ein Modul zu benutzen, das JS Webseiten öffnen kann. Also schaue ich zu cpan doc, nimm Code und versuche es zu starten. Nichts, kein Inhalt. Was mache ich falsch? Bitte korrigieren Sie mich. Oder rate mir vielleicht etwas. Ich versuche, Selenium zu verwenden, habe aber Probleme mit der Installation, siehe Fehler, wenn ich Selen in der Linux-Konsole laufen lasse.PERL WWW :: Scripter nicht arbeiten, nicht zurück Inhalt

use WWW::Scripter; 

    $w = new WWW::Scripter; 
    $w->use_plugin('JavaScript'); 

    open(FH, "<links.csv"); 
    while (<FH>) { 
    $url = $_; 

    if ($url !~ /http(s)/) { 
     $url = "http://".$url; 
    } 

    $w->get(url); 
    $html = $w->content; 

    print "=======\n"; 
    print Dupmper $w->content; 
    print "=======\n"; 
} 
+0

Außerdem gibt es WWW :: Mechanize :: Firefox und :: Chrome. Sie steuern ein Browserfenster auf Ihrem Computer fern, so dass Sie X benötigen, wenn Sie mit Linux arbeiten. :: Chrome wurde vor einer Woche veröffentlicht und ist immer noch nicht sehr Feature-komplett. Es sollte einen Headless mehr unterstützen, wo Sie keinen Windowmanager brauchen. Sie können es verwenden, um den endgültigen Quellcode herauszuholen, nachdem JS-Sachen ausgeführt wurden und daran arbeiten. – simbabque

+0

Wenn ich versuche, Mechanize Firefox zu verwenden, habe ich Fehler -^[[Aroot @ Antonow:/var/www/html/work8 # perl work8.pl Verbindung fehlgeschlagen, Problem beim Verbinden mit "localhost", Port 4242: Verbindung abgelehnt at /usr/local/share/perl/5.22.1/MozRepl/Client.pm Zeile 144 Ich sollte einige Daemon ausführen, bevor Sie dieses Modul verwenden? – rogersnest

+0

Sie müssen ein Firefox-Addon installieren und es starten, damit das Perl-Modul mit Firefox kommunizieren kann. Es gibt einen Abschnitt zur Problembehandlung oder FAQ im Pod, in dem erklärt wird, wie das geht. Es denkt, es ist am Ende. Ich habe gerade keinen Computer, damit ich ihn nicht verlinken kann. Das Add-on heißt mozrepl – simbabque

Antwort

1

Zuerst sollten Sie immer use strict und use warnings in Ihren Perl-Programmen. Sie hätten Ihren Tippfehler aufgegriffen.

Zweitens sollten Sie den Returncode von get() überprüft haben, da dies gezeigt hätte, dass etwas nicht in Ordnung war.

Drittens gibt es in Ihrem Code einige veraltete Perl-Programmierpraktiken.

# Always use these 
use strict; 
use warnings; 

use WWW::Scripter; 
# Added this 
use Data::Dumper; 

# Don't use indirect object notation. 
# Declare variable 
my $w = WWW::Scripter->new; 
$w->use_plugin('JavaScript'); 

# Three-arg version of open() 
# Lexical filehandle 
# Check result of open() and die on failure 
open(my $in_fh, '<', 'links.csv') or die $!; 

while (<$in_fh>) { 
    # Fixed regex. 
    # 1/ Anchored at start of string 
    # 2/ Made 's' optional (and non-captured) 
    if (! /^https?/) { 
    # Use string interpolation 
    $url = "http://$url"; 
    } 

    # Capture HTTP response 
    # Use '$url', not 'url' 
    my $resp = $w->get($url); 

    # Check request is successful 
    unless ($resp->is_success) { 
    # If not, warn and die 
    warn $resp->status_line; 
    next; 
    } 

    print "=======\n"; 
    print Dumper $w->content; 
    print "=======\n"; 
} 
+0

Gut. Es geht um. Es klappt. Aber wenn es versucht, HTML ein anderes Mal zu analysieren, habe ich sehr großen Fehler bekommen. Und mit LWP habe ich keinen solchen Fehler. Alles funktioniert ziemlich gut, aber große sehr große Pausen, wenn HTML von einigen Seiten erhalten. Weiter ist der Fehlertext für Sie. Verwendung von nicht initialisierten Wert $ ms in Division (/) um /usr/local/share/per/5.22.1/WWW/Scripter.pm Zeile 825. – rogersnest

+0

Ich kann den vollständigen Text des Fehlers hier veröffentlichen. Aber ich kann Ihnen einen Link zum vollständigen Fehlertext geben. https://justpaste.it/18e33 – rogersnest

+0

Wenn Sie zusätzliche nützliche Informationen zum Teilen haben, bearbeiten Sie bitte Ihre Frage, um sie hinzuzufügen. –