2013-09-30 16 views
5

Muszę zeskanować strony z karierami wielu firm (za ich zgodą).Scraping strony z obsługą ajaxów

ważnymi czynnikami w podejmowaniu decyzji, co mogę używać

  1. będę skrobanie około 2000 stron dziennie, więc trzeba przyzwoicie szybki rozwiązanie
  2. Niektóre z tych stron zapełnić danych za pośrednictwem ajax po załadowaniu strony.
  3. Mój webstack to Ruby/Rails z MySql itp.
  4. Napisałem skrobaki wcześniej, używając scrapy (python) (+ Selenium dla stron obsługujących ajax).

Moje wątpliwości

  1. Jestem zdezorientowany, czy mam iść z pytona (tj scrapy + selen, myślę, że jest to najlepsza alternatywa w Pythonie), albo zamiast tego wolą coś w Ruby (jak cała moja codebase jest w ruby).
  2. Scrapy + selen jest często powolny, czy istnieją szybsze alternatywy w ruby? (To ułatwiłoby podejmowanie decyzji) Najbardziej popularna alternatywa dla Ruby z obsługą stron ładowanych przez Ajax wydaje się być Watir Czy ktoś może komentować jej prędkość. są też jakieś inne alternatywy Ruby (np Mechanize/Nokogiri + coś innego dla Ajax Loaded stron)

EDIT

skończył przy użyciu Watir-webdriver + Nokogiri, tak że mogę wykorzystaj aktywny rekord podczas przechowywania danych. Nokogiri jest znacznie szybszy niż Watir-webdriver przy pobieraniu danych.

Scrapy byłaby szybsza, ale kompromis prędkości nie był tak znaczący, jak kompromis w zakresie obsługi różnego rodzaju stron internetowych w scrapach (np. Wyszukiwanie ajaxowe na niektórych stronach docelowych, które muszę koniecznie przejść) .

Mam nadzieję, że to pomoże komuś.

+0

To może nie zmieścić się na przypadek użycia, ale na stronach AJAX z Mechanize/Nokogiri, co można zrobić, to odświeżenie tej strony co 5-10 sekund. Chociaż nie jest to idealne i zależy od wymaganej częstotliwości, możesz uzyskać wszystkie dane, które są ładowane przez te połączenia JS. –

+0

Nie jestem całkowicie pewny, co mówisz, jest słuszne. Myślę, że mechanize/Nokogiri nie mają interpreterów javascript (http://stackoverflow.com/questions/3852678/can-mechanize-read-ajax-ruby) –

+0

Nie, ale nawet jeśli dane są wypychane do tabeli po przerwie . Tak długo, jak te dane są utrwalone w tabeli, jeśli po prostu ponownie uzyskasz stronę, będziesz w stanie ją zeskrobać. Wystarczy tylko zweryfikować w przeglądarce, że po tym, jak dane strony są zapełniane przez AJAX, jeśli po odświeżeniu strony dane nadal tam są. To jest coś, co możesz użyć do skrobania Mechanize/Nokogiri, ale musisz ponownie załadować tę stronę. –

Odpowiedz

1

Jeśli ważna jest szybkość, można użyć klejnotu watir-webdriver do napędu PhantomJS (przeglądarka bezgłosowa z obsługą JavaScript). Otwórz dowolną stronę w PhantomJS, a jeśli watir-webdriver jest zbyt wolny, aby uzyskać z niej dane, możesz przekazać renderowany kod HTML do Nokogiri.

Więcej:

+0

nadal czytając linki, o których wspomniałeś. ostatni link prowadzi do wygasłej domeny, powinieneś ją odnowić. –

+0

link jest już dostępny. –

+0

Skończyło się na użyciu watir-webdrivera + nokogiri, chociaż nie jest to klejnot, ponieważ preferowałem jakąś elastyczność na przyszłość. –

1

Należy sprawdzić ten przewodnik Making AJAX Applications Crawlable opublikowaną przez Google, omawia AJAX schemat indeksowania których niektóre support www.

Chcesz wyszukać #! w fragmencie kodu adresu URL, oznacza to przeszukiwaczowi, że witryna obsługuje schemat indeksowania AJAX i że serwer zwróci migawkę HTML strony po nieznacznym zmodyfikowaniu adresu URL.

Full Specification

+1

Dzięki za poradnik (pomóżcie mi, jeśli zbuduję aplikacje napędzane ajaxem, które chcę skreślić przez Google). Niestety nie wszystkie moje witryny docelowe śledzą to. –

Powiązane problemy