2016-03-31 3 views
0

Dieser Code wird weiterhin die gleiche Website auf einer Schleife aus einer Liste von tausend Seiten herunterladen. Konnte keinen Weg finden. Was ich gegoogelt habe, könnte ein Problem mit Split sein.PhantomJS Herunterladen von vielen Websites beginnt die gleiche Website nach ersten Downloads zu kopieren

var fs = require('fs'); 
var pageContent = fs.read('list.txt'); 
var arrdata = pageContent.split(/[\n]/); 
var system = require('system'); 
var page = require('webpage').create(); 
var args = system.args; 
var imagelink; 
var content = " "; 

function handle_page(i){ 
    var imageLink = arrdata[i]; 
    page.open(imageLink, function(){ 
     fs.write("file"+i+".txt", page.content, 'w'); 
     handle_page(i+1); 
    }); 
} 
handle_page(0); 
+0

Sie haben keine Stop-Bedingung wie [die Antwort] (http://StackOverflow.com/a/31422918/1816580) Sie haben diesen Code genommen, so dass es die letzte URL über und "öffnen" wird erneut. Das ist meine Vermutung. Auf welcher Seite fängt es falsch an? –

+0

Es beginnt sich auf der 4. URL zu benehmen. Das Hinzufügen der Stoppbedingung hat keine Auswirkung auf das Ergebnis. – bon

+0

Welche PhantomJS-Version verwenden Sie? Bitte registrieren Sie sich für die Ereignisse 'onConsoleMessage', 'onError',' onResourceError', 'onResourceTimeout' ([Beispiel] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js)). Vielleicht gibt es Fehler. PhantomJS 2.x ist dafür bekannt, einige Fehler zu verstecken, also sollten Sie PhantomJS 1.9.8 ausprobieren. –

Antwort

0

Gelöst durch Verwendung einer Batch-Datei, um eine URL aus einer Datei abzurufen und ein phantomJS-Skript zu starten. Beachten Sie, dass dies länger dauern kann, aber es war die einzige Möglichkeit, dies mit einer großen Liste zu erledigen.

Batch:

@echo off 
for /f "tokens=*" %%a in (C:\PATH\PATH\PATH\PATH\list.txt) do (
    echo %%a 
    phantomjs save_script.js %%a 
) 
pause 

PhantomJS save_page.js:

var page = require('webpage').create(); 
var fs = require('fs'); 
var system = require('system'); 
var re = system.args[1] 

page.open("http://"+re, function(){ 
    fs.write(re.substr(22,100)+".html", page.content, 'w'); 
    phantom.exit(); 
}); 

I substr verwendet (22.100), um den letzten Teil der Website-URL als eindeutige Dateinamen zu übernehmen. URLs wurden ohne http: // gespeichert, da es im Code einige Komplikationen gab.

Verwandte Themen