Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]wyciąganie tekstu ze strony
Forum PHP.pl > Forum > Przedszkole
skabszo
witam mam pytanie otóż robię stronę dla znajomego który zajmuje się handlem organów kościelnych. Jakbyście mogli zerknąć na tę stronę byłbym wdzięczny - http://www.ahlbornorgans.com/eng/products/..._regted_eng.htm - chodzi o te wszystkie dane, to są tzw rejestry. I tu moje pytanie - czy da się jakoś zrobić by wyciągnąć z tego źródła sam tekst? bo próbowałem tak:
  1. <?php
  2. $plik=file("http://adres.bla.pl");
  3.  
  4. for($x<180; $x<300; $x++)
  5. {
  6. echo $plik[$x];
  7. }
  8. ?>
ale niestety takie cóś to pobiera wszystko łącznie ze źródłem i tu dochodze do problemu gdyż w źródle są błędy np stosowanie znacznika nobr który się nie waliduje, a głównym założeniem strony była pełna walidacja. Dotychczas mi się to udawało jednak teraz nie bardzo wiem jak to przejść. Wiem że moge skopiować tekst, wkleić do worda i zapisać jako pdf ( to w ostateczności ) ale chciałbym jakoś to spróbować zrobić właśnie metodą html/php. A że php dopiero się zaczynam uczyć toteż moja wiedza ograniczona jest do minimum. Próbowałem z File_get_contents(); ale nie wyszło..
webdice
Musisz użyć wyrażeń regularnych.
skabszo
<myśli> mógłbyś ciut jaśniej? bo przeczytałem na php że służy ta funkcja do wypisywania ciągu znaków ale to czy ja będę musiał samemu to wszystko wklepywać czy tekst bedzie pobierany ze strony?

mhm nikt nie wie?;/
strife
Za pomocą odpowiednich wyrażeń regularnych jesteś w stanie wyciągnać co tylko chcesz z tej strony, z pominięciem źródła, wyciągniesz tylko tekst. Poczytaj poszukaj, jak już coś wymyślisz i dalej będziesz miał problemy opisz dokładnie z czym to pomożemy Ci dalej smile.gif

preg_match_all" title="Zobacz w manualu PHP" target="_manual

Pozdrawiam.
skabszo
kurcze co tu jest źle?
  1. <?php 
  2. $url = 'http://www.ahlbornorgans.com/eng/products/organum/organum3_regted_eng.htm';
  3. $tekst = file_get_contents($url);
  4. preg_match_all('@<div class="featReg">(.*)<!--end content -->@iU', $tekst, $wynik); 
  5. print_r($wynik[1]);
  6. ?>
bo doczytałem troszkę w google o tym i coś takiego wykombinowałem ale nie działa - wyświetla się tylko Array()
strife
Ponieważ zwracane wyniki z tej funkcji leżą w tablicy wielowymiarowej.

  1. <?php
  2. $result[0][1]
  3. ?>


Aby zobaczyć jakie dane zostały wyciągnięte użyj

  1. <?php
  2. // ...
  3. echo '<pre>';
  4. var_export($wynik);
  5. echo '</pre>';
  6. ?>


I masz jak na tacy wszystko. :]

Pozdrawiam.
skabszo
<hmm> ja chyba robie coś nie tak ( wybacz moją niewiedzę ) zrobiłem tak jak napisane ( tzn tak mi sie zdaje ) i otrzymuje tym razem

array (
0 =>
array (
),
1 =>
array (
),
)

:|
  1. <?php 
  2. $url = 'http://www.ahlbornorgans.com/eng/products/organum/organum3_regted_eng.htm';
  3. $tekst = file_get_contents($url);
  4. preg_match_all('@<div class="featReg">(.*)<!--end content -->@iU', $tekst, $wynik);
  5. print_r($wynik[0][1]);
  6. ?>
  7. <div style="width:80%;text-style:italic;">
  8. <?php
  9. echo '<pre>';
  10. var_export($wynik);
  11. echo '</pre>';
  12. ?>
  13. </div>
strife
  1. <?php
  2. // ...
  3. $tekst = file_get_contents($url);
  4. preg_match_all('@<div class="featReg">(.*)<!--end content -->@siU', $tekst, $wynik);
  5. echo '<pre>';
  6. var_export($wynik); // $wynik[0][0]
  7. echo '</pre>';
  8. ?>


Teraz musisz te dane obrobić sobie ( jeśli chcesz się pozbyć tagów ), czyli w podobny sposób wyciągasz dane, mogą Ci się też przydać operacje na string'ach - odsyłam do manuala. Jeszcze trochę pracy przed Tobą winksmiley.jpg

Pozdrawiam.
skabszo
o dzieki:) powiedz mi tylko jedno - czemu jak stosuje ten skrypt to dane wyciągniete są zduplikowane? tzn no wpierw pojawiają się raz później odstep i znow? taka jest wlasnosc preg_match_all?
strife
Cytat(skabszo @ 8.07.2007, 10:53:11 ) *
o dzieki:) powiedz mi tylko jedno - czemu jak stosuje ten skrypt to dane wyciągniete są zduplikowane? tzn no wpierw pojawiają się raz później odstep i znow? taka jest wlasnosc preg_match_all?


Nie są zduplikowane, var_export" title="Zobacz w manualu PHP" target="_manual pokazuje wszystkie elementy tablicy, dlatego masz takie wrażenie. Zrób sobie prosty przykład, z użyciem preg_match_all" title="Zobacz w manualu PHP" target="_manual, albo zobacz te w manualu.

Jak byś zrobił:

  1. <?php
  2. // ...
  3. echo $wynik[0][0];
  4. ?>


To miałbyś tylko raz to wyświetlone, bo odwołujemy się do danego elementu w tablicy. Poczytaj winksmiley.jpg

Pozdrawiam.
skabszo
haha.gif działa biggrin.gif a to teraz próbowałem cały ten mój przykład złożyć już i oto rezultat:
  1. <?php
  2. $url = 'http://www.ahlbornorgans.com/eng/products/organum/organum3_regted_eng.htm';
  3. $tekst = file_get_contents($url);
  4. preg_match_all('#<div class="featReg">(.*)<!--end content -->#siU', $url, $out);
  5. foreach($out[1] as $Value){
  6. echo $Value;
  7. echo "n"; 
  8. }
  9. ?>
no i powinno wyświetlić wszystko to co jest między tagami a nie wyświetla. Myślałem że to może kolor fontu ale to nie to <mhmm>skoro na prostym przykładzie działąło to myslalem ze na tym tez zadziala a tu zonk ohmy.gif
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.