Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]wyciąganie tekstu ze strony
skabszo
post 2.07.2007, 08:29:48
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


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..
Go to the top of the page
+Quote Post
webdice
post 2.07.2007, 08:56:36
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Musisz użyć wyrażeń regularnych.
Go to the top of the page
+Quote Post
skabszo
post 6.07.2007, 20:39:38
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


<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?;/
Go to the top of the page
+Quote Post
strife
post 6.07.2007, 20:58:02
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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.


--------------------
Go to the top of the page
+Quote Post
skabszo
post 7.07.2007, 10:18:56
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


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()
Go to the top of the page
+Quote Post
strife
post 7.07.2007, 10:34:34
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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.


--------------------
Go to the top of the page
+Quote Post
skabszo
post 7.07.2007, 10:51:58
Post #7





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


<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>
Go to the top of the page
+Quote Post
strife
post 7.07.2007, 11:17:43
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


  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.


--------------------
Go to the top of the page
+Quote Post
skabszo
post 8.07.2007, 09:53:11
Post #9





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


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?
Go to the top of the page
+Quote Post
strife
post 8.07.2007, 16:58:04
Post #10





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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.


--------------------
Go to the top of the page
+Quote Post
skabszo
post 9.07.2007, 14:18:31
Post #11





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


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
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:05