PhantomJS和pjscrape - 在多个URL上失败

时间:2012-03-10 14:39:02

标签: javascript webkit web-scraping scraper phantomjs

概述

我正在尝试用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个网址后失败。

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];
}

第二个数组 WORKS 并且不会失败,即使它来自同一个站点。

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];
}

问题

在迭代productURLs时,PhantomJS page.open可选回调会自动假定失败。即使页面尚未完成加载。

我知道这一点,因为我在运行HTTP调试器时启动了脚本,即使在PhantomJS报告页面加载失败之后,HTTP请求仍在运行。

但是,与categoriesURLs一起运行时,代码可以正常工作。

假设

  1. 上面列出的所有网址都是有效的
  2. 我有PhantomJS和pjscrape的最新版本
  3. 可能的解决方案

    这些是我迄今为止尝试过的解决方案。

    1. 禁用图片加载page.options.loadImages = false
    2. timeoutInterval中设置较大的pjs.config这显然无用,因为生成的错误是page.open失败而非超时失败。
    3. 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

问题是由PhantomJS引起的。 这已经解决了。

我现在使用PhantomJS v2.0。