Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][curl] Wyciąganie danych ze strony
Forum PHP.pl > Forum > PHP
roobik
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.
rad11
To nie mozesz wyzwalac tego skryptu tak czesto jak bedziesz chcial uzywajac np cron`a?
roobik
Móc mogę. Ale nie chcę. Ponawiam prośbę o pomoc...
rad11
To jak masz zamiar aktualizowac te dane u siebie nie wywolujac dosyc czesto skryptu?
roobik
Za każdym razem gdy wejdę na stronie dane pobierane są curlem?
Nie róbmy off'a, proszę wink.gif
andrew654
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ć
roobik
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...
andrew654
To teraz bierzesz $Wyniki[0][0] i wyrażeniem regularnym wyciągasz wartości z komórek
roobik
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 wink.gif
viking
Przy takiej strukturze strony naprawdę życzę powodzenia regexpami. http://wwwgo.pl/article/9/phpquery_-_szybk...bienstwo_jquery
roobik
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ę sad.gif
andrew654
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/
viking
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().
roobik
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
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.