2013-07-07 17 views
5

Próbuję zeskanować witrynę, patrząc na jej kod HTML w przeglądarce Chrome i przechwytując dane za pomocą Nokogiri. Problem polega na tym, że niektóre tagi są generowane dynamicznie i nie pojawiają się z otwartym żądaniem (url) przy korzystaniu z open-uri. Czy istnieje sposób, aby "zmusić" stronę do dynamicznego generowania jej treści, aby narzędzie takie jak otwarte uri mogło być czytane?Uzyskiwanie dynamicznie generowanego kodu HTML za pomocą Nokogiri/Open URI

+1

Zobacz [mechanise] (http://mechanize.rubyforge.org/). Myślę, że może zrobić to, co chcesz. – Aaronneyer

+2

W zależności od * sposobu * tej witryny generuje swoją zawartość, może być konieczne wykonanie jej kodu JavaScript. – tessi

+0

Czasami zmechanizowane zaklinowane w złożonych witrynach internetowych. Jeśli JRuby jest opcją, a mechanizacja nie działa, przyjrzę się także [Celerity] (http://celerity.rubyforge.org/). – yonosoytu

Odpowiedz

4

Jeśli odczytanie go za pomocą open-uri nie generuje potrzebnej zawartości, istnieje duże prawdopodobieństwo, że klient generuje treść przy użyciu Javascript.

To może być dobra wiadomość - sprawdzając żądania AJAX, które robi strona, możesz znaleźć źródło JSON, którego szukasz, a następnie możesz je bezpośrednio prosić i parsować. Dzięki temu uzyskasz dostęp do swoich danych bez konieczności przeszukiwania kodu HTML - pod ręką!

Jeśli to nie działa z jakiegoś powodu, będziesz musiał otworzyć stronę z jakąś przeglądarką, pozwolić jej wykonać skrypt JavaScript po stronie klienta, a następnie zrzucić wynikowy DOM do HTML. Coś takiego jak PhantomJS jest doskonałym wyborem do tego rodzaju pracy.

+0

wskazówka # 1 zaoszczędziła mi mnóstwo czasu. –

Powiązane problemy