Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Parsowanie stron www - kilka pytań
bigevil
post 13.10.2012, 12:22:43
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.10.2012

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
cudny
post 13.10.2012, 12:28:41
Post #2





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
CuteOne
post 13.10.2012, 13:12:37
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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

Ten post edytował CuteOne 13.10.2012, 13:12:54
Go to the top of the page
+Quote Post
cudny
post 13.10.2012, 13:47:29
Post #4





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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ę


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
karakara
post 13.10.2012, 14:15:54
Post #5





Grupa: Zarejestrowani
Postów: 71
Pomógł: 6
Dołączył: 22.09.2012

Ostrzeżenie: (0%)
-----


(Subiektywnie) Najprościej będzie w Pythonie i BeautifulSoup
Go to the top of the page
+Quote Post
Crozin
post 13.10.2012, 14:50:25
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@cudny: Żeby się nie powtarzać: http://stackoverflow.com/questions/1732348...-contained-tags
@bigevil: DOM + xPath
Go to the top of the page
+Quote Post
bigevil
post 13.10.2012, 17:56:24
Post #7





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.10.2012

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował bigevil 13.10.2012, 17:57:16
Go to the top of the page
+Quote Post
zegarek84
post 13.10.2012, 18:44:07
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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

Ten post edytował zegarek84 13.10.2012, 18:45:04


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
cudny
post 13.10.2012, 20:19:33
Post #9





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
erix
post 15.10.2012, 12:45:05
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 1.05.2025 - 06:01