Co to są dobre roboty webowe oparte na Ruby? [zamknięte]

Patrzę na pisanie własnych, ale zastanawiam się, czy są jakieś dobre crawlery internetowe, które są napisane w Ruby.

W przeciwieństwie do pełnowymiarowego robota webowego, przydatne będą wszelkie klejnoty, które mogą być pomocne w budowaniu robota webowego. Wiem, że ta część pytania jest poruszana w kilku miejscach, ale lista klejnotów mających zastosowanie do budowania robota internetowego byłaby również świetnym zasobem.

Author: Jordan Dea-Mattson, 2011-02-13

5 answers

Buduję Wombat, Ruby DSL do indeksowania stron internetowych i wyodrębniania treści. Sprawdź to na github https://github.com/felipecsl/wombat

Jest jeszcze na wczesnym etapie, ale jest już funkcjonalny z podstawową funkcjonalnością. Więcej rzeczy zostanie dodanych naprawdę wkrótce.

 19
Author: Felipe Lima,
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
2016-11-15 23:26:06

Kiedyś pisałem pająki, skrobaki stron i analizatory stron do mojej pracy, i nadal pisać je okresowo zarysować niektóre swędzenie dostaję.

Ruby ma kilka doskonałych klejnotów, które ułatwiają:

  • Nokogiri to mój # 1 wybór dla parsera HTML. Kiedyś używałem Hpricot, ale znalazłem kilka stron, które spowodowały, że eksplodował w płomieniach. Przesiadłem się później na Nokogiri i byłem z niego bardzo zadowolony. Regularnie używam go do parsowania HTML,RDF / RSS / Atom i XML. Ox wygląda ciekawe też, więc to może być kolejny kandydat, choć uważam, że wyszukiwanie DOM jest dużo łatwiejsze niż próba przejścia przez duży hash, taki jak to, co jest zwracane przez Ox.
  • OpenURI jest dobry jako prosty klient HTTP, ale może wchodzić w drogę, gdy chcesz robić bardziej złożone rzeczy lub musisz mieć wiele żądań naraz. Polecam spojrzeć na HTTPClientlub Typhoeus z Hydrą dla skromnych do ciężkich prac. krawężnik też jest dobry, ponieważ używa biblioteki cURL, ale interfejs nie jest dla mnie tak intuicyjny. Warto jednak na to spojrzeć. HTTPclient jest również warty obejrzenia, ale skłaniam się ku wspomnianym wcześniej.

    Uwaga: OpenURI ma pewne wady i luki, które mogą mieć wpływ na niczego nie podejrzewających programistów, więc trochę wypadło z gry. RestClient jest bardzo godnym następcą.

  • będziesz potrzebował bazy danych, i jakiś sposób, aby z nią porozmawiać. To nie jest zadanie dla Rails możesz użyć ActiveRecord, oddzielonego od Rails, by rozmawiać z bazą danych. Robiłem to kilka razy i działa dobrze. Zamiast tego, bardzo lubię Sequel dla mojego ORM. Jest bardzo elastyczny w sposobie, w jaki pozwala rozmawiać z bazą danych, od używania prostego SQL do korzystania z możliwości sequela do programowego budowania zapytania, do modelowania bazy danych i korzystania z migracji. Po zbudowaniu bazy danych możesz użyć Rails, aby działać jako front-end do danych chociaż.
  • Jeśli zamierzasz poruszać się po witrynach w jakikolwiek sposób poza zwykłym chwytaniem stron i podążaniem za linkami, będziesz chciał spojrzeć naMechanize . Ułatwia wypełnianie formularzy i wysyłanie stron. Jako dodatkowy bonus, możesz pobrać zawartość strony jako dokument HTML Nokogiri i parsować za pomocą mnóstwa sztuczek Nokogiri.
  • do masowania / zmieniania adresów URL bardzo lubię adresowalne::URI . Jest bardziej w pełni funkcjonalny niż wbudowany Moduł URI. Jedna rzecz, która URI robi to miło, ponieważ ma metodę URI#extract do skanowania ciągu znaków w poszukiwaniu adresów URL. Jeśli ten ciąg stanie się ciałem strony internetowej, byłby to alternatywny sposób lokalizowania linków, ale jego minusem jest to, że dostaniesz również linki do obrazów, filmów, reklam itp. i będziesz musiał je odfiltrować, co prawdopodobnie spowoduje więcej pracy niż w przypadku korzystania z parsera i szukania wyłącznie tagów <a>. W związku z tym Mechanize ma również links metoda zwracająca wszystkie linki na stronie, ale nadal będziesz musiał je filtrować, aby określić, czy chcesz je śledzić, czy ignorować.
  • Jeśli uważasz, że będziesz musiał poradzić sobie ze stronami Manipulowanymi przez Javascript lub stronami, które dynamicznie pobierają swoją zawartość z Ajaxu, powinieneś rozważyć użycie jednego z wariantów WATIR . Istnieją smaki dla różnych przeglądarek na różnych systemach operacyjnych, takich jak Firewatir, Safariwatir i Operawatir, więc będziesz musiał dowiedzieć się, co działa dla Ciebie.
  • robisz nie chcesz polegać przechowywanie listy adresów URL do odwiedzenia lub odwiedzonych adresów URL w pamięci. Zaprojektuj schemat bazy danych i przechowuj tam te informacje. Poświęć trochę czasu na projektowanie schematu, myśląc o tym, co chcesz wiedzieć, zbierając linki na stronie. SQLite3, MySQL i Postgres są doskonałym wyborem, w zależności od tego, jak duże będą potrzeby Twojej bazy danych. Jeden z moich analizatorów witryn został specjalnie zaprojektowany, aby pomóc nam polecić zmiany SEO dla firmy z listy Fortune 50. Trwał ponad trzy tygodnie obejmujące około dwudziestu różnych miejsc, zanim mieliśmy wystarczająco dużo danych i zatrzymał go. Wyobraź sobie, co by się stało, gdybyśmy mieli przerwę w dostawie prądu i wszystkie dane poszły do wiadra bitów.

Po tym wszystkim będziesz chciał również, aby Twój kod był świadomy właściwej etykiety spideringu: jakie są kluczowe kwestie przy tworzeniu robota Web crawlera?

 67
Author: the Tin Man,
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-05-23 12:24:35

Więc chcesz dobry web crawler oparty na Ruby ?

Spróbuj spider lub anemone. Oba mają solidne użycie zgodnie z liczbą pobrań RubyGems.

Pozostałe odpowiedzi, jak dotąd, to szczegółowe i pomocne , ale nie skupiają się na pytaniu, które pyta o biblioteki ruby dla web crawlerów . Wygląda na to, że to rozróżnienie może być mylone: zobacz moja odpowiedź na " Crawling vs. Web-Scraping?"

 5
Author: David J.,
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-05-23 11:45:49

Obszerna lista Tin Mana jest dla mnie dobra, ale częściowo przestarzała.

Większość stron internetowych, z którymi mają do czynienia moi klienci, jest silnie uzależniona od AJAX/Javascript. Używam Watir / watir-webdriver / selenium od kilku lat, ale obciążenie związane z załadowaniem ukrytej przeglądarki internetowej na zapleczu, aby renderować te rzeczy DOM, nie mówiąc już o tym, że przez cały ten czas nadal Nie zaimplementowano użytecznej "sesji przeglądarki", aby umożliwić ponowne użycie nowego kodu przeglądarka w pamięci w tym celu, zestrzeliwując bilety, które mogły w końcu zadziałać na warstwy API. (odwołując się do https://code.google.com/p/selenium/issues/detail?id=18 ) **

Https://rubygems.org/gems/phantomjs

To jest to, co przenosimy teraz nowe projekty, aby umożliwić renderowanie niezbędnych danych bez nawet żadnej niewidzialnej przeglądarki internetowej z pamięcią Xvfb i procesorem.

* * alternatywne podejścia również nie powiodły się out:

 1
Author: Marcos,
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-05-23 12:08:57

Jeśli nie chcesz pisać własnego, użyj zwykłego robota. Tam są dziesiątki.

Jeśli chcesz napisać swój własny, to napisz swój. Web crawler nie jest do końca skomplikowaną czynnością, składa się z:

  1. pobieranie strony internetowej.
  2. lokalizowanie adresów URL na tej stronie, filtrowane tak, jak chcesz.
  3. dla każdego adresu URL w tej witrynie powtórz Krok 1.

Oh, A to wydaje się być duplikatem " web crawler w ruby ".

 0
Author: Arafangion,
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-05-23 12:16:29