2016-03-31 1 views
0

このコードは、同じサイトを千ページのリストからループでダウンロードし続けます。その周りに方法を見つけることができませんでした。私はそれがスプリットの問題かもしれないと思った。多くのサイトをダウンロードしているPhantomJSが、最初の数回のダウンロード後に同じサイトをコピーし始めます。

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

このコードをとった[the answer](http://stackoverflow.com/a/31422918/1816580)のような停止条件がないため、最後のURLを "開く"もう一度。これは私の推測です。どのページが誤動作し始めますか? –

+0

4番目のURLに間違いがあります。停止条件を追加しても結果には影響しません。 – bon

+0

どのPhantomJSバージョンを使用していますか? 'onConsoleMessage'、' onError'、 'onResourceError'、' onResourceTimeout'イベント([Example](https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js))に登録してください。多分エラーがあるかもしれません。 PhantomJS 2.xはいくつかのエラーを隠すことが知られているので、PhantomJS 1.9.8も試してみるべきです。 –

答えて

0

バッチファイルを使用してファイルからURLを取得し、phantomJSスクリプトを開始することで解決します。これには時間がかかることがありますが、大きなリストを扱うためにはこれが唯一の方法でした。

バッチ:

@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:私は一意のファイル名として、ウェブサイトのURLの最後の部分を取るためにSUBSTR(22100)を使用

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(); 
}); 

。 URLはhttp://なしで保存されていたため、コード内にいくつかの問題があったためです。

関連する問題