2013-08-10 11 views
20

chcę wykonać następujące czynności po stronie serwera:Zeskrobać strona internetowa i przejdź przez kliknięcie przycisków

1) Zebrać stronę internetową
2) zasymulować kliknięcie na tej stronie, a następnie przejdź do nowej strony.
3) Zebrać nową stronę
4) symulować kilka kliknięć przycisku na nowej stronie
5) Przesyłanie danych z powrotem do klienta za pośrednictwem json czy coś

mam na myśli używając go node.js .

Ale jestem mylić co do których moduł należy użyć
a) Zombie
b) Node.io
c) Phantomjs
d) JSDOM
e) Coś jeszcze

Mam zainstalowany węzeł , io, ale nie jestem w stanie uruchomić go za pomocą wiersza polecenia.

PS: Ja pracuje w Windows 2008 Server

Odpowiedz

30

Zombie.js i Node.io działają na JSDOM, stąd masz do wyboru opcje JSDOM (lub dowolnego równoważnego opakowania), przeglądarkę bezgłową (PhantomJS, SlimerJS) lub Cheerio.

  • JSDOM jest dość wolny, ponieważ musi odtworzyć DOM i CSSOM w pliku Node.js.
  • PhantomJS/SlimerJS są poprawnymi przeglądarkami bezgłowymi, więc wydajność jest dobra, a także bardzo niezawodna.
  • Cheerio to lekka alternatywa dla JSDOM. Nie odtwarza całej strony w Node.js (po prostu pobiera i analizuje DOM - nie jest wykonywany javascript). Dlatego nie można tak naprawdę klikać przycisków/linków, ale bardzo szybko zeskrobuje się strony internetowe.

Biorąc pod uwagę twoje wymagania, prawdopodobnie skorzystałbym z czegoś na kształt przeglądarki bezgłowej. W szczególności wybrałabym CasperJS, ponieważ ma ładny i ekspresyjny interfejs API, jest szybki i niezawodny (nie musi wymyślać koła, jak parsować i renderować dom lub css jak JSDOM) i jest bardzo łatwy do współdziałać z elementami takimi jak przyciski i łącza.

przepływ pracy w CasperJS powinien wyglądać mniej więcej tak:

casper.start(); 

casper 
    .then(function(){ 
    console.log("Start:"); 
    }) 
    .thenOpen("https://www.domain.com/page1") 
    .then(function(){ 
    // scrape something 
    this.echo(this.getHTML('h1#foobar')); 
    }) 
    .thenClick("#button1") 
    .then(function(){ 
    // scrape something else 
    this.echo(this.getHTML('h2#foobar')); 
    }) 
    .thenClick("#button2") 
    thenOpen("http://myserver.com", { 
    method: "post", 
    data: { 
     my: 'data', 
    } 
    }, function() { 
     this.echo("data sent back to the server") 
    }); 

casper.run(); 
+0

także jaki jest Twój pogląd na temat korzystania z zombie” – user2129794

+0

w moim doświadczeniu Zombie nie jest tak wiarygodne, jak PhantomJS lub CasperJS.Czasami przepływ jest przerywany przez bardzo dziwne usterki i nie mogę zrozumieć, kiedy używać przycisków, kliknięć, linków itp., Aby poruszać się po stronie. Miło jest jednak, aby Node uruchamiał skrobanie, a nie proces zewnętrzny. Myślę, że to naprawdę zależy od twojej aplikacji. Jeśli możesz obejść fakt, że zewnętrzna usługa wykonuje skrobanie, idź z przeglądarką bez nagłówka. – danielepolencic

2

modułów, które wymienione wykonaj następujące czynności:

  • Phantomjs/Zombie - symulować przeglądarkę (bez głowy - nic nie jest faktycznie wyświetlany). Może być używany do zgarniania statycznego lub dynamicznego. Lub testowanie stron html.
  • Node.io/jsdom - webscraping: wyodrębnianie danych ze strony (statyczne).

Patrząc na swoje wymagania, możesz użyć fantomu lub zombie.

Powiązane problemy