5

概要

PhantomJSとpjscrapeフレームワークを使用して非常に基本的なスクレーパーを作成しようとしています。

私のコード

pjs.config({
timeoutInterval: 6000,
timeoutLimit: 10000,
format: 'csv',
csvFields: ['productTitle','price'],
writer: 'file',
outFile: 'D:\\prod_details.csv'
});

pjs.addSuite({
title: 'ChainReactionCycles Scraper',
url: productURLs, //This is an array of URLs, two example are defined below
scrapers: [
    function() {
        var results [];
        var linkTitle = _pjs.getText('#ModelsDisplayStyle4_LblTitle');
        var linkPrice = _pjs.getText('#ModelsDisplayStyle4_LblMinPrice');
        results.push([linkTitle[0],linkPrice[0]]); 
        return results;
    }
]
});

使用されるURL配列

この最初の配列は機能せず、3番目または4番目のURLの後で失敗します

var productURLs = ["8649","17374","7327","7325","14892","8650","8651","14893","18090","51318"];
for(var i=0;i<productURLs.length;++i){
  productURLs[i] = 'http://www.chainreactioncycles.com/Models.aspx?ModelID=' + productURLs[i];
}

この2番目のアレイは機能し、同じサイトからのものであっても失敗しません

var categoriesURLs = ["304","2420","965","518","514","1667","521","1302","1138","510"];
for(var i=0;i<categoriesURLs.length;++i){
  categoriesURLs[i] = 'http://www.chainreactioncycles.com/Categories.aspx?CategoryID=' + categoriesURLs[i];
}

問題

productURLsPhantomJSを反復処理する場合、page.openオプションのコールバックは自動的に失敗を想定します。ページの読み込みが完了していない場合でも。

HTTPデバッガーの実行中にスクリプトを起動し、PhantomJSがページの読み込みエラーを報告した後もHTTPリクエストが実行されていたため、これを知っています。

ただし、。を指定して実行すると、コードは正常に機能しcategoriesURLsます。

仮定

  1. 上記のURLはすべて有効です
  2. PhantomJSとpjscrapeの両方の最新バージョンを持っています

可能な解決策

これらは私がこれまでに試した解決策です。

  1. 画像の読み込みを無効にするpage.options.loadImages = false
  2. 生成されたエラーは失敗であり、タイムアウトの失敗ではなかったためtimeoutInterval、これより大きな設定はpjs.config明らかに役に立ちませんでした。page.open

何か案は?

4

1 に答える 1

2

この問題は PhantomJS が原因でした。これは解決されました。

現在、PhantomJS v2.0 を使用しています。

于 2012-03-14T20:50:53.543 に答える