PhantomJS и pjscrape - ошибка нескольких URL-адресов - PullRequest
5 голосов
/ 10 марта 2012

Обзор

Я пытаюсь создать очень простой скребок с платформой 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];
}

Этот второй массив РАБОТАЕТ и не выходит из строя, даже если он с того же сайта.

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, а HTTP-запрос продолжал выполняться даже после того, как PhantomJS сообщил о загрузке страницы сбой .

Однако код отлично работает при работе с categoriesURLs.

Предположения

  1. Все URL, указанные выше, являются действительными
  2. У меня есть последние версии PhantomJS и pjscrape

Возможные решения

Это решения, которые я пробовал до сих пор.

  1. Отключение загрузки изображения page.options.loadImages = false
  2. Установки большего timeoutInterval в pjs.config это было бесполезно, по-видимому, так как была сгенерирована ошибка page.open, а НЕ ошибка времени ожидания.

Есть идеи?

1 Ответ

2 голосов
/ 15 марта 2012

Проблема была вызвана PhantomJS.Теперь это решено.

Я сейчас использую PhantomJS v2.0.

...