Parser - jest możliwość?

0

Witam postanowiłem sobie napisać parser żeby pobrać dane z jednego z portali. Niestety na tej stronie są elementy ajax, które rozwijają listę interesujących mnie danych co 50 elementów. I teraz nie wiem jak w c++ odebrać kod html w postaci jak już bym kliknął w ten przycisk który powoduje ładowanie kolejnych danych.
Proszę o jakiekolwiek sugestie.

0

Aby wyświetlić kolejne 50 elementów na stronie jest kod JS, który sprawia, że

  1. przeglądarka użytkownika wysyła żądanie pod powien adres URL
  2. w odpowiedzi na to żądanie otrzymuje dane kolejnych 50 elementów
  3. skrypt JS, który te żądanie obsługuje pobiera te dane i dodaje je w odpowiedni sposób do strony.

Wniosek prosty - musisz wykonać to zapytanie, które wykonywane jest AJAXem i w odpowiedzi dostaniesz kolejne elementy.

Natomiast - jeśli ten skrypt w JS w sposób specyficzny obrabia te elementy i dodaje HTMLa i potrzebujesz właśnie tego HTMLa - no to masz problem, musisz ogarnąć co dokładnie robi JS i wykonać to samo.

Albo możesz napisać skrypt do przeglądarki (np. Greasemonkey), pobrać wszystkie dane i gdzieś zapisać i potem w C++ tylko gotowe dane przeparsować.
Możesz również poszukać jakiegoś gotowego silnika JS, żeby sobie kod tej strony w swoim programie wykonać...

0

Co przeglądarka wysyła i gdzie i co dostaje jako odpowiedź możesz podejrzeć prawie w każdym Sniferze.

0

@_mk_ : dzięki za odpowiedź ;)

@_13th_Dragon: na podstawie tych pakietów odczytanych mogę wygenerować potem URL który da mi ten sam efekt co naciśnięcie przycisku?

0

Może konsola w przeglądarce będzie lepsza od WireSharka?

0

Zacznijmy może więc od początku. (instrukcja będzie dla przeglądarki FF, jeśli używasz innej, musisz sobie jakoś poradzić).

Po włączeniu przeglądarki przechodzisz do instalacji Add-Onów i instalujesz addon Firebug (nowe FF mają od jakiegoś czasu możliwości takie jak firebug, ale jakoś się jeszcze do tego nie przekonałem, stąd instrukcja dla Firebuga).

Po zainstalowaniu przechodzisz na interesującą Cię stronę i włączasz Firebug'a. U dołu przeglądarki pojawi Ci się okienko z kilkoma zakładkami. Klikasz w zakładkę "Net". Możliwe, że pojawi Ci się napis, że masz ją wyłączoną i od razu dostaniesz możliwość jej włączenia. Włączasz.

Następnie klikasz w interesujący Cię przycisk. Jeśli rzeczywiście jest tam jakiś AJAX, to w zakładce Net ujrzysz zapytanie, które wykonała przeglądarka. Klikasz w to zapytanie, rozwiną Cię się jego detale. Jest tam kilka zakładek. W szczególności interesującymi są zakładki - Headers, Params oraz Response.
Analizując wysłane nagłówki i parametry, a także otrzymaną odpowiedź, możesz wywnioskować jak dokładnie działa dodawanie nowych elementów i zrobić sobie z tym co chcesz.

Warto również, używając narzędzia typu CURL, wykonać tego typu zapytanie samemu i sprawdzić czy otrzyma się oczekiwaną odpowiedź.

Tutaj przykładowy filmik, gdzie ktoś używa Firebuga i w szczególności zakładki net (nie wiem co gość na filmiku mówi, ale to nie istotne, popatrz gdzie klika i klikaj tak samo).
(tytuł "Capturing Hidden Web Requests With Firebug" jest chyba nieco pretensjonalny :P w końcu requesty te wykonuje przeglądarka, więc niby w jaki sposób są hidden :P)

0

Do podglądania requestów możesz użyć Firefox + Live HTTP Headers:
https://addons.mozilla.org/pl/firefox/addon/live-http-headers/

1 użytkowników online, w tym zalogowanych: 0, gości: 1