Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parsowanie stron www - kilka pytań
Forum PHP.pl > Forum > PHP
bigevil
Witam,
Chciałbym (częściowo jestem do tego zmuszony) zrobić na użytek własny parser ogłoszeń (głównie motoryzacyjnych). Interesowałby mnie np. te trzy serwisy:
- otomoto, np.: http://otomoto.pl/renault-clio-rs-C26108070.html
- gumtree, np.: http://warszawa.gumtree.pl/c-Samochody-Mot...QAdIdZ419403932
- moto.gratka, np: http://moto.gratka.pl/tresc/peugeot-3008-h...i-13697691.html

Miałoby to działać na zasadzie 'schowka'. Wklejam na swojej stronie link do ogłoszenia, serwer na podstawie linku wybiera odpowiedni skrypt, parsuje treść (model, rocznik, przebieg itd.), zapisuje dane do bazy i wyświetla na stronie w formie tabelki.

Szukam jak najprostszego rozwiązania (znam HTML/CSS, podstawy PHP i MySQLa). Czytałem o HTML DOM Parser - czy za jego pomocą dałoby się 'ściągnąć dane' z ww. serwisów? Patrzę na kod źródłowy otomoto i teoretycznie można znaleźć jakąś regułę (parametr w znaczniku <dt></dt>, a jego wartość w <span></span>). Pytanie jak to wygląda w praktyce? Nie mam w tej dziedzinie żadnego doświadczenia, dlatego prosiłbym Was o pomoc. Nie chodzi mi tutaj o gotowca, tylko o zasugerowanie jakiegoś narzędzia, dzięki któremu uda mi się osiągnąć opisany cel (w możliwie najprostszy sposócool.gif.

Pozdrawiam!
cudny
Kilka rzeczy:

Od strony PHP możesz wyciągnąć treść strony poprzez $content = file_get_content( 'url' );
Jeśli jedna potrzebujesz wysłać jakiś formularz to należy użyć cULR'a
Parsujesz używając wyrażeń regularnych, żeby wyciągnąć coś z div'a o id="costam" to (pisze z palca wiec może nie zadziałać):

/\<div\s.*id=\"costam\"[^\>]>(.*?)\<\/div\>/

A jeśli jednak chcesz na tym zarobić i to zrobić szybko to zleć to komuś.
Wyrażenia regularne dla początkującego są na prawde trudne
CuteOne
Nie radze parsować strony za pomocą wyrażeń regularnych, które szukaja <div id="content-x"></div>. Lepszym choć trudniejszym rozwiązaniem jest zaprzęgnięcie do tego DOM i szukanie w treści pomiędzy wybranymi znacznikami HTML odpowiedniego wzorca np. używając similar_text, strpos lub wyrażeń regularnych
cudny
CuteOne czemu nie radzisz używać wyrażeń reg. ?
Ja od zawsze korzystam z wyrażeń, są elastyczne i zawsze dostaję to co chę.

Wyjaśnij proszę
karakara
(Subiektywnie) Najprościej będzie w Pythonie i BeautifulSoup
Crozin
@cudny: Żeby się nie powtarzać: http://stackoverflow.com/questions/1732348...-contained-tags
@bigevil: DOM + xPath
bigevil
Dziękuję za odpowiedzi. Stronka miałaby być prywatna, jest to tylko dodatkowy szkolny projekt. Całość ograniczałaby się do 'wsparcia' maksymalnie 3-5 serwisów z ogłoszeniami. Jeśli bym się go podjął to na ukończneie mam jakieś półtora miesiąca. Tak jak pisałem wyżej, znam tylko podstawy PHP i jeżeli to zadanie wymagałoby zagłębienia się w jakieś bardzo zaawansowane techniki, to raczej sobie odpuszczę.

Nad Pythonem też myślałem. Tylko najpierw musiałbym opanować jakieś podstawy języka, nauczyć się jak obsługiwać takie skrypty na serwerze itd. Hmm... byłoby z tym dużo roboty?


Spójrzcie na kody źródłowe ww. stron - którą z metod byłoby najłatwiej zastosować?
zegarek84
najmniej problemów będziesz miał z DOM (oczywiście będziesz musiał go zrozumieć)... jeśli chciałbyś łatwo parsować strony nawet z treścią JS to najwygodniej skorzystać z QT (C++) gdzie jest też przeglądarka WebKit i także możesz korzystać z metod DOM'u, w QT możesz także pisać sporą część aplikacji w JS...

Podsumowując w PHP skorzystaj z DOM, dodatkowo masz biblioteki typu phpQuery wzorujące się na jQuery gdzie możesz odpytywać za pomocą selektorów CSS oraz inne... dodatkowo nie pamiętam ale chyba w ZF2 coś podobnego jest umożliwiającego łatwe przeszukiwanie drzewa DOM za pomocą selektorów CSS
cudny
Cytat(Crozin @ 13.10.2012, 14:50:25 ) *
@cudny: Żeby się nie powtarzać: http://stackoverflow.com/questions/1732348...-contained-tags
@bigevil: DOM + xPath



@Crozin, świetny post na StackOverflow, słowo daje, chętnie dał bym pomógł, ale nie mogę bo nie jestem właścicielem posta.
Oczywiście nie depresjonował bym całkowicie tutaj wyrażeń, bo ładowanie doom'a do niewielkich ilości textu, jak można napisać w kilku dosłownie znakach zapytanie regularne ( w wielu wypadkach ) to chyba nie jest najwydajniejsze rozwiązanie (chodzi o wydajność programisty, nie samego skryptu smile.gif ).

Do tego często korzystałem z DOM'a swojego czasu i xpath tak samo jak i same wyrażenia regularne wcale nie jest taki łatwy. Do wielu rzeczy też należy się przyzwyczaić, więc @bigevil jeśli znasz tylko podstawy PHP i nie poruszasz się zbyt dobrze po drzewach DOM'a to chyba bym odpuścił mając tylko 1,5 miesiąca i oprócz tego życie prywatne ofkors smile.gif
erix
Cytat
jak można napisać w kilku dosłownie znakach zapytanie regularne ( w wielu wypadkach ) to chyba nie jest najwydajniejsze rozwiązanie (chodzi o wydajność programisty, nie samego skryptu ).

Właśnie dlatego warto DOM/phpQuery. Z prostej przyczyny - przyjdzie do głowy twórcom wprowadzić minimalną zmianę, to regexpy już leżą i trzeba pisać od nowa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.