Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Witam

Muszę napisać skrypt wybierający informacje ze strony HTML.

Ma to wyglądać tak:
- podaje link dilera oto-moto (np. http://autoparyla.otomoto.pl/index.php)
- skrypt ma wybierać:
* informacje o dilerze
* jego samochody, części i inne
* kilka informacji o samochodzie, części
- ma dodać je do bazy danych
- i wyświetlać

Użycie jakiego parsera będzie najprostsze?

PozdrawiamGrzegorz Kolawa edytował(a) ten post dnia 06.06.11 o godzinie 18:55
Michał Sznurawa

Michał Sznurawa Scala Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Otomoto ma webapi, ale nie wiem, na jakich zasadach udostępniane.
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Znalazłem dokumentacje.
http://otomoto.pl/site_images/1/0/static/docs/webapi/o...
Z tego co tam jest napisane wynika, że trzeba być dilerem aby móc korzystać. Można zarządzać tylko własnymi ogłoszeniami.

Aktualnie pracuje z parserem DOM, ale jest to żmudne zadane. Szukam wygodniejszego rozwiązania.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Pareser HTML (oferty dilerów otomoto)

W PHP masz do wyboru trzy opcje:

parser DOM (DOMDocument)
SimpleXML
parser SAX ( XMLReader)

możesz użyć też w przypadku simpleXml i Dom-u obiektu XPath (DOMXpath), łatwiej jest dzięki niemu nawigować po dokumencie.

konto usunięte

Temat: Pareser HTML (oferty dilerów otomoto)

Otomoto należy do grupy allegro, więc ja bym polecał http://home.ccil.org/~cowan/XML/tagsoup/ ;-) Ale to niestety java.
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Z Javy jestem słaby wiec odpada.
Z tego co widzę zostaje mi DOM i celowanie w odpowiednie znaczniki. Jak zwykle niektóre nie mają id ani żadnego innego punktu zaczepienia, przykładowo:


<dt class="main">Typ:</dt>
<dd><a class="otoLink" href="/dostawcze-i-ciezarowe/ford/transit-t350-sredni-blaszak-2-4tdci/dostawczy-do-3-5t" target="_blank"><span>Dostawczy do 3,5t</span></a></dd>


<dt>Rok produkcji:</dt>
<dd><a class="otoLink" href="/dostawcze-i-ciezarowe/ford/transit-t350-sredni-blaszak-2-4tdci/2004" target="_blank"><span>2004</span></a></dd>





<dt>Przebieg w km:</dt>
<dd><span>190 000 km</span></dd>


<dt>Moc:</dt>
<dd><span>90 KM (66 kW)</span></dd>
Grzegorz Kolawa edytował(a) ten post dnia 07.06.11 o godzinie 10:45
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Mam kolejny problem. Umiem wybrać wszystkie linki do zdjęć, ale jak zapisać te zdjęcia (pliki) na mój serwer?
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Pareser HTML (oferty dilerów otomoto)

Grzegorz Kolawa:
Mam kolejny problem. Umiem wybrać wszystkie linki do zdjęć, ale jak zapisać te zdjęcia (pliki) na mój serwer?


$trescPliku = file_get_contents($url);
file_put_contents('nazwa_pliku',$trescPliku);


O ile masz włączone allow_url_fopen w php.iniWojciech Soczyński edytował(a) ten post dnia 09.06.11 o godzinie 14:17

konto usunięte

Temat: Pareser HTML (oferty dilerów otomoto)

http://code.google.com/p/phpquery/
z tym można banalnie działać na html
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

@Wojciech: Super. Na kompa mi ściąga, a na serwerze zobaczę później.
@Kamil: Przyda się, dziękuje :)Grzegorz Kolawa edytował(a) ten post dnia 09.06.11 o godzinie 14:27
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Mam kolejne pytanie.

Aktualnie mam skrypt który pobiera 10 ofert dealera i zapisuje je do bazy, bo gdy jest więcej ofert to skrypt przekracza 30 sekundowy limit. Pobierze 10 ofert i trzeba kliknąć przycisk i pobiera kolejnych 10.

Chciałbym zrobić dynamiczne dodawanie do bazy w JS / AJAX. Mam linki do wszystkich ofert w bazie danych w tablicy. Chciałbym aby skrypt dynamiczny pobierał link z bazy danych, uruchamiał skrypt PHP, który pobiera informacje o ofercie, pobierał wartość true lub false w zależności od powodzenia skryptu PHP i przechodził do kolejnego linku aż do ich wyczerpania.

Mam nadzieje, że jest to zrozumiałe :|

Pozdrawiam i proszę o pomoc / wskazówki.

konto usunięte

Temat: Pareser HTML (oferty dilerów otomoto)

W jakim celu to robisz?
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Skrypt jest to zadanie rekrutujące na staż do firmy tworzącej strony WWW. Przy okazji mam się czegoś douczyć, bo staż będę mógł zacząć dopiero z początkiem lipca.

Czyli w celach edukacyjnych. Mogę korzystać z wszelkiej pomocy jaką znajdę w internecie. Zależy mi żeby zrobić dobrze to zadanie, bo wszystko wykonuje dokładnie.

konto usunięte

Temat: Pareser HTML (oferty dilerów otomoto)

Spoko. Tylko musisz sobie zdawać sprawę z tego, że łamiesz prawo, a firma może Ci podziękować za darmowy skrypt i powiedzieć "papa".

Ajaksa bym nie mieszał - to można odpalać z crona przecież, albo inaczej - cyklicznie.
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Dlaczego łamie prawo?
Skrypt udostępniam im na hostingu zewnętrznym. Mogę go w każdej chwili usunąć.

Nie wiem czym jest Corn i jak działa.
Dostałem informację, że można to wykonać w js / ajaxie.

Gdyby ktoś mnie nakierował byłbym wdzięczny :)

konto usunięte

Temat: Pareser HTML (oferty dilerów otomoto)

W skrócie - Cron to automat który pozwala uruchamiać skrypty o konkretnej godzinie lub co pewien interwał czasu.

Ale na temat.

Najprostszy patent jaki możesz zrobić, bez użycia kosmicznych technologii: co każde odczytanie oferty sprawdzasz ile czasu zostało do osiągnięcia maksymalnego czasu wykonania skryptu. Jeśli zostało mniej niż X - niechaj skrypt sam się wywoła i zacznie pracę od ostatniej pozycji :)


$timeout = strtotime('+'.(ini_get('max_execution_time') - 5).'seconds');

if($timeout < time()) {
// zapis obecnej pozycji
// restart (wyslac odpowiedni naglowek lub komende JavaScriptu)
}

// odczytaj oferte

W powyższym skrypcie - X wynosi 5 sekund :)Michał Wachowski edytował(a) ten post dnia 29.06.11 o godzinie 00:15
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Spróbuję to wykorzystać :)
Nadal czekam na sugestie i propozycje.

konto usunięte

Temat: Pareser HTML (oferty dilerów otomoto)

Uh...

Pojedź po prostu regexpami po stronie...

mając kod:

<dt class="main">Typ:</dt>
<dd><a class="otoLink" href="/dostawcze-i-ciezarowe/ford/transit-t350-sredni-blaszak-2-4tdci/dostawczy-do-3-5t" target="_blank"><span>Dostawczy do 3,5t</span></a></dd>


<dt>Rok produkcji:</dt>
<dd><a class="otoLink" href="/dostawcze-i-ciezarowe/ford/transit-t350-sredni-blaszak-2-4tdci/2004" target="_blank"><span>2004</span></a></dd>



$html = @file_get_contents('http://dealer.otomoto.pl/index.php');
// tutaj usuwanie \r\n, tabulatorów i innych historii
$c = preg_match("/Typ:(.*?)<span>(.*?)<\/span>/", $html, $o);
$car_type = $o[2];
$c = preg_match("/Rok produkcji:(.*?)<span>(.*?)<\/span>/", $html, $o)
$car_year = $o[2];


itd itd.. taki kod można pisać z palca w 30 sekund, po co więc komplikujesz sobie życie szukając technologii rodem z NASA?
Grzegorz K.

Grzegorz K. Web Developer

Temat: Pareser HTML (oferty dilerów otomoto)

Technologia NASA jest fajna :D ale nie praktyczna, wiem...
Jakub, kod, który napisałeś bardzo mi pomógł, bo dzięki niemu można dokładniej wygrzebać dane.
Aaa i jeszcze jedno, skrypt piszę pod tzw. "blondynkę", czyli ma być intuicyjny, prosty i przejrzysty. Chciałem wykorzystać AJAXa do zrobienia, paska ładowania, który pokazywałby postęp w %. Dzięki zastosowaniu technologii AJAX ominąłbym limit czasu i uatrakcyjnił wygląd skryptu :)Grzegorz Kolawa edytował(a) ten post dnia 29.06.11 o godzinie 12:58

konto usunięte

Temat: Pareser HTML (oferty dilerów otomoto)

No rozumiem.

Po cholerę używać KOMBAJNU do koszenia trawnika?
Lepiej daruj sobie ten pasek postępu.

Limit czasu? Jaki limit czasu?

Chodzi o timeout serwera?

set_time_limit(0);
załatwi sprawę.

pozdro

Następna dyskusja:

Poszukiwany koder (X)HTML, ...




Wyślij zaproszenie do