Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][curl] Wyciąganie danych ze strony
roobik
post
Post #1





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


Witam.
Początkuję w curlu i (nie ukrywam) potrzebuję Waszej pomocy.

Chcę "pozbierać" informacje ze strony
http://infopasazer.intercity.pl/?p=station&id=60103
i umieścić je u siebie. Ale utknąłem i nie mam pomysłu jak to ugryźć.

Mój obecny kod:
Kod
<?php
$curl = curl_init();
//Inicujemy curl

curl_setopt($curl, CURLOPT_URL, 'http://infopasazer.intercity.pl/?p=station&id=60103');
//pobieramy dane z "http://www.lfsworld.net/?win=stats&racer=rafal612b2"

curl_setopt($curl, CURLOPT_REFERER, "http://www.google.pl/");
//ustawiamy refferer na www.google.pl (niektóre strony mają zabezpieczenia

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//wyniku nie wyświetlamy a zapisujemy do zmiennej co ułatwia prace nad nim

curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)');
//ustawiamy useragent (niektóre strony mają zabezpieczenia)

curl_setopt($curl, CURLOPT_TIMEOUT, 30);
//Maxymalny czas połączenia ze stroną

curl_setopt($curl, CURLOPT_HEADER, 0);
//nie chcemy dołączać nagłówka

$strona = curl_exec($curl);
//uruchamiamy skonfigurowanego curla

curl_close($curl);
//zamykamy






?>

Wiem, że to nic nie wyświetla.
Interesują mnie z tej strony dwie tabele: przyjazdy i odjazdy. Problemem jest m.in. to, że dane na tej stronie bardzo często są aktualizowane.

Ten post edytował roobik 15.11.2015, 12:19:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
rad11
post
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


To nie mozesz wyzwalac tego skryptu tak czesto jak bedziesz chcial uzywajac np cron`a?
Go to the top of the page
+Quote Post
roobik
post
Post #3





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


Móc mogę. Ale nie chcę. Ponawiam prośbę o pomoc...
Go to the top of the page
+Quote Post
rad11
post
Post #4





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


To jak masz zamiar aktualizowac te dane u siebie nie wywolujac dosyc czesto skryptu?
Go to the top of the page
+Quote Post
roobik
post
Post #5





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


Za każdym razem gdy wejdę na stronie dane pobierane są curlem?
Nie róbmy off'a, proszę (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
andrew654
post
Post #6





Grupa: Zarejestrowani
Postów: 35
Pomógł: 9
Dołączył: 16.11.2012

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


Jeśli wszystko jest ok, to w zmiennej $strona masz cały html pobranej strony. Wyrażeniami regularnymi musisz wydłubać dane które są Ci potrzebne albo operując na DOM, tylko że to kolejne schody zanim wszystko zacznie działać
Go to the top of the page
+Quote Post
roobik
post
Post #7





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


Nie wiem, czy w dobrym kierunku idę, ale metodą prób i błędów otrzymałem dość dużą tablicę:
  1. <?php
  2. $curl = curl_init();
  3. //Inicujemy curl
  4.  
  5. curl_setopt($curl, CURLOPT_URL, 'http://infopasazer.intercity.pl/?p=station&id=60103');
  6. //pobieramy dane z "http://www.lfsworld.net/?win=stats&racer=rafal612b2"
  7.  
  8. curl_setopt($curl, CURLOPT_REFERER, "http://www.google.pl/");
  9. //ustawiamy refferer na www.google.pl (niektóre strony mają zabezpieczenia
  10.  
  11. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  12. //wyniku nie wyświetlamy a zapisujemy do zmiennej co ułatwia prace nad nim
  13.  
  14. curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)');
  15. //ustawiamy useragent (niektóre strony mają zabezpieczenia)
  16.  
  17. curl_setopt($curl, CURLOPT_TIMEOUT, 30);
  18. //Maxymalny czas połączenia ze stroną
  19.  
  20. curl_setopt($curl, CURLOPT_HEADER, 0);
  21. //nie chcemy dołączać nagłówka
  22.  
  23. $strona = curl_exec($curl);
  24. //uruchamiamy skonfigurowanego curla
  25.  
  26. curl_close($curl);
  27. //zamykamy
  28.  
  29. $td = preg_match_all('/<div class="table-responsive">(.+?)<\/div>/is', $strona, $Wyniki);
  30.  
  31. print_r($Wyniki[0][0]); // przyjazdy
  32. print_r($Wyniki[0][1]); // odjazdy
  33. ?>

Z tym, że teraz nie wiem co dalej. Gdybym miał każdą komórkę jako element tablicy - to już z górki.
Da radę podzielić taką tablicę?

Bardzo proszę o pomoc...

Ten post edytował roobik 30.11.2015, 07:38:13
Go to the top of the page
+Quote Post
andrew654
post
Post #8





Grupa: Zarejestrowani
Postów: 35
Pomógł: 9
Dołączył: 16.11.2012

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


To teraz bierzesz $Wyniki[0][0] i wyrażeniem regularnym wyciągasz wartości z komórek
Go to the top of the page
+Quote Post
roobik
post
Post #9





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


Tylko że kurna wyciągam po jednej literce zaczynając od
<
potem d
potem i
potem v
(czyli <div...)

Nie mam pojęcia jak to rozwalić, ale może znowu metodą prób i błędów (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Przy takiej strukturze strony naprawdę życzę powodzenia regexpami. http://wwwgo.pl/article/9/phpquery_-_szybk...bienstwo_jquery

Ten post edytował viking 30.11.2015, 07:56:27
Go to the top of the page
+Quote Post
roobik
post
Post #11





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


Dlatego właśnie szukam pomocy u Was...
Jakby to była błahostka, to bym nie pisał. A piszę tylko wtedy, gdy juz naprawdę "mam problem"

Utknąłem niestety. Zajmę się tym po pracy.

//edit
po pracy... ale i tak utknąłem
Pomóżcie plis - sam tego nie rozwalę (IMG:style_emoticons/default/sad.gif)

Ten post edytował roobik 30.11.2015, 17:08:29
Go to the top of the page
+Quote Post
andrew654
post
Post #12





Grupa: Zarejestrowani
Postów: 35
Pomógł: 9
Dołączył: 16.11.2012

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


A mógłbyś chociaż wyświetlić co tam masz?

  1. print_r($Wyniki[0][0]); // przyjazdy



EDIT:

Tutaj potestuj sobie wyrażenia, ładnie i na kolorowo pokazuje co znajduje z objaśnieniami https://regex101.com/

Ten post edytował andrew654 30.11.2015, 21:17:40
Go to the top of the page
+Quote Post
viking
post
Post #13





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Nie napisałeś co chcesz z tym dalej zrobić. Wyciągasz wszystkie tabele z danej strony i...? Podałem przykład jak łatwo operować na takich danych za pomocą phpquery i np selektora nth-child().
Go to the top of the page
+Quote Post
roobik
post
Post #14





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


Cytat(adrew654)
A mógłbyś chociaż wyświetlić co tam masz?

[img=http://s4.postimg.org/xcx5yfn7t/prtsc.jpg]
//edit (stan na 01.12.2015 godz. 07:07 - zmienia się to praktycznie co minutę)


Cytat(viking)
Nie napisałeś co chcesz z tym dalej zrobić.

1. Pozbyć się <a href=...
2. Zmienić układ i dodać grafikę (np. zamiast napisu Przewozy Regionalne, dać grafikę-miniikonkę Przewozów)
3. Na nowo sformatować całą tabelę (układ, inna czcionka itp...
Z powyższymi punktami nie będę miał żadnego problemu.
Chodzi o to, bym otrzymał jakąś bardziej "dostępną" tablicę, gdzie każdą komórkę (td) bądź nawet span będzie można w dowolny sposób sformatować.

Piszę "z bani", więc pomyłka na pewno będzie:
Wyniki PRZYJAZDY
Array ( [0] => Array ( [0] =>
[0][1] -> 66945/4
[0][2] -> Przewozy Regionalne
[0][3] -> 2015-12-01
[0][4] -> Oleśnica - Wrocław Główny
[0][5] -> 06:46
[0][6] -> 0 min

i tak każdy wiersz (sprawa polskich liter też nie stanowi problemu)

//edit
Póki nie wymyślę nic innego, to przyszedł mi tymczasowy pomysł na preg_match_all oraz str_replace

Ten post edytował roobik 1.12.2015, 23:54:46
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 09:02