Scraping danych ze strony JSP

0

Czesc,

Probuje uzyc HTTP Dom Parser do scrapingu danych ze strony (http://przystanki.bialystok.pl/smartcontrol/vm.jsp?stop=012).

Uzywalem kiedys tego, ale nigdy ze stronami jsp. Jesli patrze na zrodlo strony to nie widze tam odpowiedniej tabeli z danymi. Jesli uzywam Inspect Element w Chrome, widze ja bez problemu. Nazywa sie 'times_table'.

Na poczatek staram sie wyrzucic nazwy wszystkich tabel zeby upewnic sie ze szukam czegos.

<?php
include('simple_html_dom.php');
// Create DOM from URL
$html = file_get_html('http://przystanki.bialystok.pl/smartcontrol/vm.jsp?stop=012');


foreach($html->find('table') as $element) 
     echo $element->id . '<br>';
 
$table = $html->find('table[id=times_table]');
echo $table;
?>

Ostatnia linia jest w sumie bezuzyteczna, zwraca mi 'Array', ale inne pomysly tez nie daly mi zadnego rezultatu wiec postanowilem wrzucic kod w takiej postaci.

Bylbym wdzieczny za jakas rade. Pozniej bedzie mi to juz latwo sformatowac i wyrzucic w postaci JSON.

Pzdr.

0

zauważ że js wykonuje się przy ładowaniu strony dynamicznie może on uzupełnia te elementy których szukasz...

0

Wiesz, nie bardzo sie znam na jsp i ogolnie na technologiach stron internetowych. Widze ze jest pewne opoznienie miedzy zaladowaniem strony a wczytaniem danych. Czyli przez to w momencie kiedy dzialanie zaczyna skrypt, nie ma jeszcze mojej tabeli tak?

1

Tu nie chodzi o jsp (generowane po stronie servera) tylko js (JavaScript) który pracuje u klienta (u cb w przeglądarce) możesz wyłuskać z tego api na jakim operuje i wykorzystać
dla przykładu dajesz zapytanie
http://przystanki.bialystok.pl/smartcontrol/method.vm?ts=1377012922675
z postem method=findTimes&p0=%7B%22request%22%3A%22012%22%7D i dostajesz odpowiedź w formie json
{"success":{"time":1377012937882,"symbol":"012","items":[{"time":"2 min.","dest":"Kopernika/Os. Bema","code":"19","theoretical":false},{"time":"4 min.","dest":"Towarowa/Pętla","code":"5","theoretical":false},{"time":"5 min.","dest":"Kleosin","code":"11","theoretical":false},{"time":"7 min.","dest":"Pietrasze","code":"9","theoretical":false},{"time":"23 min.","dest":"Stadion Miejski","code":"7","theoretical":false},{"time":"24 min.","dest":"Wiadukt","code":"23","theoretical":false},{"time":"17:50","dest":"Dojlidy Górne","code":"19","theoretical":true},{"time":"17:52","dest":"Sienkiewicza/Ryska","code":"9","theoretical":true},{"time":"17:53","dest":"Towarowa/Pętla","code":"5","theoretical":true},{"time":"18:01","dest":"Szpital Zakaźny","code":"19","theoretical":true},{"time":"18:05","dest":"Sienkiewicza","code":"106","theoretical":true}],"name":"Antoniukowska/Knyszyńska","messages":[]}}

0

Pieknie! Wyglada wiec na to ze nie bede musial jako tako robic 'scrapingu'. Na pierwszy rzut oka nie rozumiem tylko jak skonstruowales ten link i jak okresliles dane w w POST.

1

Instalujesz najlepszą przeglądarkę (FireFox) i dogrywasz pluga FireBug włączasz konsole F12 i przeglądasz sobie zasoby z zakładki Konsola

0

Chyba zaczynam łapać.

Czyli generalnie mam wysłać nagłowek z nazwa funkcji i numerem przystanku:

method findTimes
p0 {"request":"002"}

Ostatnie (mam nadzieję) pytanie to o co chodzi z tym ciągniem znaków w adresie - method.vm?ts=1377012922675

1

new Ajax.Request('method.vm?ts=' + new Date().getTime(), {
z pliku
scripts/vm/vm_dao.js
chyba nie muszę tłumaczyć co to Date().getTime()

0

;)

Wygląda na to że wiem już o tym wszystko. Wielkie dzięki za wytlumaczenie krok po kroku.

Jakbyś potrzebował pomocy zwiazanej z iOS lub Windows Phone, wal na priv.

Pzdr

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