Обзор
Я пытаюсь создать очень простой скребок с фреймворком 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
Этот первый массив НЕ РАБОТАЕТ и дает сбой после третьего или четвертого 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
.
Предположения
- Все указанные выше URL ДЕЙСТВИТЕЛЬНЫ.
- У меня есть последние версии PhantomJS и pjscrape.
Возможные решения
Это решения, которые я пробовал до сих пор.
- Отключение загрузки изображений
page.options.loadImages = false
- Настройки большего размера
timeoutInterval
вpjs.config
явно бесполезны, поскольку сгенерированная ошибка относится к сбоюpage.open
, а НЕ к сбою тайм-аута.
Любые идеи?
productUrls
. Я не думаю, что это проблема Pjscrape — это звучит как проблема с PhantomJS. - person nrabinowitz   schedule 13.03.2012