Zeskrobuj stronę internetową i nawiguj, klikając przyciski

Chcę wykonać następujące czynności po stronie serwera:

1) zeskrobać stronę www
2) Symuluj kliknięcie na tej stronie, a następnie przejdź do nowej strony.
3) zeskrobuj nową stronę
4) symulowanie kliknięć niektórych przycisków na nowej stronie
5) wysyłanie danych z powrotem do klienta przez json czy coś

Myślę o użyciu go z Node.js.

Ale jestem zdezorientowany co do tego, którego modułu powinienem użyć
a) Zombie
b) Node.io
c) Phantomjs
d) JSDOM
e) cokolwiek innego

Zainstalowałem node, io, ale nie mogę go uruchomić za pomocą wiersza polecenia.

PS: pracuję w windows 2008 server

Author: Anuj Arora, 2013-08-10

2 answers

Zombie.js i Node.io uruchom na JSDOM, stąd Twoje opcje są albo z JSDOM (lub dowolnym równoważnym opakowaniem), bezgłową przeglądarką (PhantomJS, SlimerJS) lub Cheerio.

  • JSDOM jest dość powolny, ponieważ musi odtworzyć DOM i CSSOM w węźle.js.
  • PhantomJS / SlimerJS są poprawnymi przeglądarkami bezgłowiowymi, więc wydajność jest ok, a te są również bardzo niezawodne.
  • Cheerio jest lekką alternatywą dla JSDOM. Nie odtwarza całej strony w węźle.js (po prostu pobiera i parsuje DOM - nie jest wykonywany javascript). Dlatego tak naprawdę nie można klikać przycisków/linków, ale bardzo szybko skrobać strony internetowe.
Biorąc pod uwagę twoje wymagania, prawdopodobnie wybrałbym coś w rodzaju przeglądarki bezgłowej. W szczególności, wybrałbym CasperJS, ponieważ ma ładne i ekspresyjne API, jest szybki i niezawodny (nie musi odkrywać koła na nowo, jak parsować i renderować dom lub css, jak robi to JSDOM) i jest bardzo łatwy w interakcji z elementami takimi jak przyciski i linki.

Twój workflow 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(); 
 35
Author: danielepolencic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-18 11:41:23

Wymienione Moduły wykonują następujące czynności:

  • Phantomjs / Zombie-symuluj przeglądarkę (bezgłowy-nic nie jest wyświetlane). Może być stosowany do skrobania statycznego lub dynamicznego. Lub testowanie stron html.
  • Node.io/jsdom -webscraping: wyciąganie danych ze strony (statyczne).

Patrząc na twoje wymagania, możesz użyć phantom lub zombie.

 2
Author: user568109,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-10 17:29:29