![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 168 Pomógł: 26 Dołączył: 15.09.2011 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Co prawda z PHP mam kontakt od 3 lat, to tematyka cURL jest mi kompletnie obca, a niestety muszę go użyć. Przechodzę do sedna: Na praktykach dostałem do napisania serwis z ogłoszeniami dla osób poszukujących pracę. Pracodawcy dodają oferty itp. Całość napisana obiektowo, ale jest jedna rzecz na której się zaciąłem. Mianowicie właśnie cURL. Chodzi o automatyczne pobiernie ofert pracy z http://www.pup.gliwice.pl/klient/oferty_pracy.html Niestety nie ma tam RSSa więc trzeba to jakoś wyciągnąć sposobem, którym właśnie jest cURL. Problem polega na tym, że na tej stronie są jedynie "zajawki" ofert a pełny opis (który muszę pobrać) znajduje się w linku, otwieranym w nowym oknie JS po kliknięciu. Skrypt ma codziennie o godzinie 18 sprawdzać czy są nowe oferty i je dodawać do moderacji (moderacja jest już zrobiona, trzeba tylko wrzucać zapytaniem do bazy danych pobrane oferty). Kompletnie nie wiem jak mam się za to zabrać. Dla mnie cURL to czarna magia. Wiem że pobrane źródło muszę filtrować regexp'ami, ale nic pozatym ![]() Połączenie już zrobiłem, źródło mam, ale dalsze grzebanie to już masakra dla mnie. Bardzo proszę o pomoc. Ten post edytował piotrex41 24.05.2012, 08:22:45 -------------------- www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 259 Pomógł: 1 Dołączył: 3.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ale w czym dokladnie jest problem ? Wchodzisz curlem na strone, wyciagasz linki i robisz petle dla stron na ktore musisz wejsc zeby cale oferty sprawdzic. Adres pelnej oferty masz w href (zapomnij o js przy curl i ogolnie php). Ustaw naglowki i referery zeby cie zbyt szybko/w ogole nie zbanowali
![]() ![]() ![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 168 Pomógł: 26 Dołączył: 15.09.2011 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Tochę mnie nastraszyłes z tym banowaniem
![]() Mój kod do cURL jest następujący:
Coś trzeba zmienić? I teraz powiedz czy dobrze zrozumiałem ![]() 1. Pobieram cURL całą zawartość strony 2. Filtruję sobie z tego linki 3. Każdy link znów traktuje cURL (w pętli) i pobieram całą zawartość, następnie wybieram co potrzebne i do bazy wrzucam poprzez zapytanie? No i jak zrobić żeby zawsze o 18 sprawdzał? Bo zdaje mi się że zwykły IF sprawdzający godzinę przez date('H'); to było by chyba za proste ![]() -------------------- www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 259 Pomógł: 1 Dołączył: 3.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ja dostalem kiedys bana na wordpress.com
![]() ![]() ![]() ![]() 1. wchodzisz na strone glowna, pobierasz linki i np zapisujesz do bazy status ze 1 etap juz wykonany 2. wchodzisz na wszystkie strony ofert (albo nie wszystkie tylko np 3 pierwsze, nie przygladalem sie serwisowi), wyciagasz linki i zapisujesz do bazy status ze wykonuje 2 etap i jest na x stronie, albo ze wykonal juz 2 etap 3. wchodzisz na wszystkie oferty, parsujesz je i zapisujesz do bazy. W bazie ja bym trzymal url'e ofert na tabeli unique zeby nie wchodzic pare razy na te same i trzymalbym tam flage zeby wiedziec czy ma to parsowac czy jeszcze nie parsowal. Zalezy jak bardzo chcesz zeby to bylo dokladne ale mysle ze tak jest ok i starczy. Ewentualnie mozesz sprawdzac czy kod odpowiedzi http ==200 jesli nie to jest cos nie tak (np strona nie istnieje albo wystapil timeout) ale dalbym sobie spokoj z tym. Jednak na przyszlosc jakbys chcial to masz kod do tego:
Sory za straszaka z banem, o to trzeba sie w sumie postarac szczerze mowiac ![]() ![]() Jesli chodzi o sprawdzanie po 18stej to ustaw sobie ten plik na zadaniu cron zeby wykonywal sie od 18 do powiedzmy 24. Sparsowanie tego serwisu moze troche trwac ale napewno sie wyrobi. Ten post edytował Octobus 24.05.2012, 08:57:14 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 168 Pomógł: 26 Dołączył: 15.09.2011 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
No dobra, mam całe źródło, i teraz tak. Każda oferta jest linkiem do kolejnej, więc musze te linki wyciagnąć. Oto kawałek kodu HTML jednej oferty:
Teraz ja muszę wyciągnąć ten link (to co się znajduje w href) - http://www.pup.gliwice.pl/klient/oferta/1285.html Ale co bym nie zrobił, to coś nie idzie tego wyciągnąć. Mój kod:
Co pokazuje ciągle pustą tablicę. Jakaś wskazówka? ![]() Ten post edytował piotrex41 24.05.2012, 11:49:20 -------------------- www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 259 Pomógł: 1 Dołączył: 3.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 168 Pomógł: 26 Dołączył: 15.09.2011 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
No niby jest ok, ale wszędzie jest ten sam link
![]() ![]() //edit Mój obecny kod:
A przypomnę że potrzebuje tylko to co jest między href = " a " ![]() Ten post edytował piotrex41 24.05.2012, 13:08:31 -------------------- www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 259 Pomógł: 1 Dołączył: 3.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Coś jest nie tak, nie moze byc wszedzie ten sam link. SPójrz w źródło czy href sie zmienia. Ja uzywam preg_match_all zawsze z przyzwyczajenia ale to raczej nie powod. Przesledz krok po kroku swoj kod co zostaje po wykonaniu kazdej funkcji i mysle ze to Cie naprowadzi.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 168 Pomógł: 26 Dołączył: 15.09.2011 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cóż, debugowanie kodu nie wiele dało, więc spróbowałem tego preg_match_all() i wyszło... No wyszło co wyszło
![]() Jest tak gigantyczna, że nawet nie mogę tu jej wkleić ![]() Mój kod:
@EDIT: Ok udało mi sie pozbyć nadmiaru info, mam już tylko linki, ale niestety tylko ze strony głównej:
I jak teraz zrobić żeby sprawdzał na wszystkich podstronach a nie tylko na 1szej? ![]() Czy za każdym razem muszę nowego curla inicjować w pętli dodającej numer strony a później łączyć tablice z linkami w 1? Ten post edytował piotrex41 25.05.2012, 09:51:44 -------------------- www.piotrex41.pl - piotrex41 portfolio
d(-.-)b - Music is my life || PHP is my passion |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 23:09 |