2012-03-10 30 views
5

PrzeglądPhantomJS i pjscrape - w przypadku braku na pewnych wielu adresów URL

Staram się stworzyć bardzo prosty skrobak z PhantomJS i ramy pjscrape.

mój kod

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 Array używany

Ta pierwsza tablica NIE DZIAŁA a nie po 3 lub 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]; 
} 

Ta druga tablica WORKS i nie zawodzą, mimo że jest z tego samego miejsca.

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

Problem

Kiedy iteracja productURLs się PhantomJS page.open opcja zwrotna automatycznie zakłada awarię. Nawet jeśli strona nie zakończyła ładowania.

Wiem o tym, gdy uruchomiłem skrypt podczas uruchamiania debuggera HTTP, a żądanie HTTP nadal działało, nawet po tym, jak PhantomJS zgłosiło awarię ładowania strony niepowodzenie.

Jednak kod działa poprawnie, gdy działa pod numerem categoriesURLs.

Założenia

  1. Wszystkie URL wymienione powyżej są ważne
  2. Mam najnowsze wersje obu PhantomJS i pjscrape

możliwych rozwiązań

Są to rozwiązania Próbowałem do tej pory.

  1. Wyłączenie obrazu załadunku page.options.loadImages = false
  2. Ustawienia większy timeoutInterval w pjs.config to nie była przydatna widocznie jako wygenerowany błąd był z page.open awarii i nie uszkodzenie limitu czasu.

Jakieś pomysły?

+0

Jak już zauważyłem na GitHub, nie mogę odtworzyć problemu - udało mi się pobrać listę 'productUrls' bez problemu.Nie sądzę, żeby to był problem Pjscrape - to brzmi jak problem PhantomJS. – nrabinowitz

Odpowiedz

2

Problem został spowodowany przez PhantomJS. Ten problem został rozwiązany.

Używam teraz PhantomJS v2.0.

+0

Naprawiono, jak? Którą wersję PhantomJs użyłeś? (Mając ten sam problem z wersją 1.6 i najnowszą skompilowaną ze źródeł Git) –

+0

jest to prawdopodobnie rozwiązane w wersji 1.8? –

+0

rozwiązany przez odejście od PhantomJS ..: D – Hzmy

Powiązane problemy