Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie danych z zewnetrznej strony...
Forum PHP.pl > Forum > PHP
marekk
Mam pewien problem do rozwiązania a mianowice potrezbuję pobrać z pewnej strony informacje wyciagane z bazy w pewnym miejscu tamtejszych stron i pozniej wyswietlic je w petli jakos ładnie na stronie wynikowej.

Zeby była jasnosc nie mam dostępu do bazy tamtejszej strony, po prostu mozna jawnie wywoływac strone zmieniając na końcu nr. ID. Ogolnie chodzi więc o jakies sensowne przefiltrowanie tamtych stron w petli, tak aby zostawiał tylko informacje z jakiejś tabelki. Moze ktoś robił coś podobnego albo ma pomysł jak to rozwiązac?

Na pierwszy rzut przychodzi mi do głowy tworzenie w petli plików, po czym odrazu otwieranie ich i kasowanie w formie np. od znaku jakiegostam do jakiegos ale czy nie da sie tego jakos prosciej ropzwiazac? A jesli nawet nie to jakimi funkcjami to wycinac - zywklymi eregami?
marekk
Własnie problem w tym, ze nie bardzo moge znalezc przykłady w wyszukiwarce.
A moglbys zpaodać jakis przykład albo link do watku z podobnym problemem?

Ogolnie dzieki za pomoc, moze jakos juz sobie poradz smile.gif
dtb
  1. <?php
  2. // wczytanie pliku
  3. $bufor = file ('http://serwer/plik.html');
  4. ?>

i teraz na przykład na stronie jest takie coś:
  1. Jakieś tam dane: <b>WARTOŚĆ_KTORA_CHCEMY_POBRAC</b>

to robimy:
  1. <?php
  2. preg_match ('#Jakieś tam dane: <b>([a-zA-Z0-9_ ]+)</b>#', $file, $wynik);
  3. print_r ($wynik);
  4. ?>
marekk
W końcu poradziłem sobie z tym problemem tzn. wsyztskie funkcje mi działaja ok. i wiem juz jak wyciagac konkretne dane z pol, jednak mam pewne pytanie.

A mianowicie czy są jakieś zabezpieczenia przed ściąganiem informacji ze stron, które mozna jawnie wywołać zmieniając numer ID na koncu? Pytam bo tak sie dziwnie skłąda, ze informacje ktore chce sciągnąc z pewnej strony w niektorych jej miejscach czyta ok. ale niektorych nie pokazuje ich. Wszelkie instrukcje do wypisania pozniejszgeo nie maja znaczenia gdyz nawet zwykła funkcja FILE czy tez jakąkolwiek inna do wypisania pliku FGETS tez probowalem) wypisując zrodlo strony daje pusty rezultat tzn. kod strony ale bez danych z bazy.
ennics
o ile wiem nie ma sposobu na zablokowanie dostępu do źródła html strony,
skoro masz organoleptyczny ("wizualny") dostęp do danych to równie dobrze
może je "zobaczyć" Twoja aplikacja. Można natrafić na pozorne zabezpieczenia
np. http://www2.thecrims.com/, zobacz źródło, nawet jak wywołasz http://www2.thecrims.com/start.php to cofa Cię do indexu np. fopen nie zadziała prawidłowo. W takich sytuacjach najlepiej jest użyć biblioteki http://pl.php.net/curl" title="Zobacz w manualu php" target="_manual
marekk
Hmm... ale wlasnie tam nie wydaje mi sie zeby było jakies obejscie, przynajmniej nic nie przekierowuje jawnie... zreszta sama zawartosc pliku cyzta tylko jak wspomniałem te wartosci z bazy cos mi omija nie wiem czemu :]

Zreszta zpaodam konkretnie strone:

strona 2580...
strona 2581...
itd...

Jak ja wypisze chocby w zwykłej petli jest wszytsko oprocz danych z bazy.

Kod
$html="";
$fp = fopen(http://www.nck.pl/bazydanych_inst.php?ins=2580,'r');
while ($line=fgets($fp,10000)) {
$html.=$line;
}

fclose($fp);

echo $html;


A np. z innego miejsca tej strony rowniez w przypadku plikow z informacjami z bazy, np. jakas inna strona

poprawnie moge wyciagnac całosc.
ennics
chyba rozumiem w czym Twój problem tkwi. Próbujesz pobrać ze strony dane
ale dane te wyświetylają się dopiero po wypełnieniu formularza i kliknięciu szukaj ?
Linki które wkleiłes wyżej nie dają żadnego wyniku a to dlatego że dane z formularza
wyszukiwarki wysyłane sa metodą POST do skryptu, a ten dopiero zwraca wyniki.
Jeśli użyjesz fopen nie masz możliwości przesłania danych POST. Jak już pisałem
w tym momencie przychodzi z pomocą CURL i dwie funkcje:
  1. <?php
  2.  
  3.  curl_setopt($ch, CURLOPT_POST, 1);
  4.  curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  5.  
  6. ?>
marekk
No rzeczywiscie tam jest akurat formularz suzkania :]

Ok. dzieki i w takim razie zaraz poprzegladam co te curle robia i jak je stosowac winksmiley.jpg
ennics
jest jeszcze coś, i chyba nie chodzi o dane POST, zauważ że jeśli otworzysz
nowe okno wyszukiwarki w wkleisz link który podałeś wcześniej
strona 2580
nie otrzymasz ządnych danych. Teraz skorzystaj z formularza żeby wyszukać obojętnie jaką pozycję i ponownie wklei link. Powinno zadziałać. Dlaczego ? Trodno powiedzieć nie patrząc w kod. Możliwe że dostęp do bazy jest inicjowany wywołaniem jakiejś akcji w formularzu... anyway, CURL zawiera szereg funkcji którymi możesz symulować przeglądarkę.
marekk
Dzieki raz jeszcze i chyba obejdzie sie nawet bez curla. Z tego co zauważyłem w formularzu jest ukryte pole hidden "wys", które wystarczy ustawic na 1 i wyświetla dane w nowych oknach przeglądarki winksmiley.jpg

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

Nie chciałem tworzyc nowego tematu wiec jeszcze tutaj z kolejnym problemem odnosnie tego watklu. Wyciągam sobie wsyztsko ponizszym kodem:

Kod
for ($i=2400; $i<2500; $i++) {

$nazwa="";
$nazwa = "http://www.nck.pl/bazydanych_inst.php?ins=$i&wys=1";
echo "<a href=$nazwa target='_blank'>".$nazwa."</a><br>";

$html="";
$fp = fopen($nazwa,'r');
while ($line=fgets($fp,10000)) {
$html.=$line;
}

fclose($fp);

preg_match_all("(<span class=\"normal\">(.*)</span></td></tr>)", $html, $matches);

echo $matches[0][0]."<br>";
echo "<hr>";
}


i dostaję dane, które chciałem otrzymac jednak nie posegregowane tzn. dane jedne po drugich - mam na myśli tą tablice $matches[0][0]... cyz wpisze tak czy $matches[1][0].. itp. zawsze wsyztsko jest razem w jednej zmiennej jakby. Nie da sie tego jakos rozdzielic i wypisac osobno chocby po przecinkach czy enterach, z tych znacznikow strony zrodłowej
Kod
<span class="normal">costam...</span></td></tr>
?
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.