Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wyrażenie regularne
evolucja
post 12.05.2011, 19:29:23
Post #1





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Cześć.
Potrzebuję wyciągnąć dane wszystkich oddziałów z tej strony:
http://skokwesola.pl/onas/oddzialy.html

Potrzebuję nazwę miejscowości, kod pocztowy, adres i telefon. Generalnie mógłbym samemu próbować stworzyć jakieś wyrażenia, ale problem jest z różnym rozłożeniem tych danych. Chodzi mi o spacje, tabulatory itd. Nie jest to jeden ciągły kod. Byłby ktoś łaskaw mi pomóc? worriedsmiley.gif


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Ulysess
post 12.05.2011, 20:07:34
Post #2





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


pobierasz zawartość strony np funkcja file_put_contents

i dalej juz przetwarzasz , mozesz uzyc do tego np pteg_match_all

jako wzór dajesz poniższy kod
"
<div class="adres"><a href="/oddzialy.html?layout=single&id=7"><strong>Złotów </strong>77-400<br /></a>
ul. Reymonta 6 </div>
<div class="telefon">tel. <br />67/ 263 57 61</div>

<div class="godziny">
<span><strong>Pon</strong><br />9:00-17:00</span>
<span><strong>Wt</strong><br />8:00-16:00</span>
<span><strong>Śr</strong><br />9:00-17:00</span>
<span><strong>Czw</strong><br />9:00-17:00</span>

<span><strong>Pt</strong><br />8:00-16:00</span>
</div>
<hr />

" ALE tam gdzie wartości są różne wstawiasz ".*" lub "(.*)" .* czyli dowolna wartość w tym miejscu , (.*) dowolna wartość w tym miejscu którą pobierasz

później zliczasz ile takich wzorów znajdzie i w pętli for wyświetlacz czy co tam chcesz z tymi danymi zrobić. PS gotowca nie dostaniesz wink.gif
Go to the top of the page
+Quote Post
lobopol
post 12.05.2011, 20:09:19
Post #3





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Jak patrzę po kodzie html to bez niczego jesteś w stanie skopiować całość. Wszystko jest ślicznie ułożone w divie o id woj-lista, a dane są wszystkie regularnie ułożone. Spacje i tabulatory przecież można uwzględnić w pregmatchu


--------------------
Go to the top of the page
+Quote Post
evolucja
post 12.05.2011, 20:17:13
Post #4





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Gdyby to było wszystko takie proste... Chyba ze wszystkich rzeczy w PHP najtrudniej mi pojąć właśnie te regular expresions. sad.gif
  1. <?
  2. $string = '<div class="adres"><strong>Ostrowiec Świętokrzyski </strong>27-400<br />
  3. ul. Jana Pawła II 7d </div>
  4. <div class="telefon">tel. <br />41/ 263 18 41</div>
  5. <div class="godziny">
  6. <span><strong>Pon</strong><br />8:00-16:00</span>
  7. <span><strong>Wt</strong><br />8:00-16:00</span>
  8. <span><strong>Śr</strong><br />8:00-16:00</span>
  9. <span><strong>Czw</strong><br />8:00-16:00</span>
  10. <span><strong>Pt</strong><br />8:00-16:00</span>
  11. </div>
  12. </div>';
  13.  
  14. $pattern = '|<div class="adres"><a href="(.*)"><strong>(.*)</strong>(.*)<br /></a>
  15. (.*)</div>
  16. <div class="telefon">tel. <br />(.*)</div>|';
  17. preg_match_all($pattern, $string, $matches);
  18. print_r($matches);
  19. ?>


Ten post edytował evolucja 12.05.2011, 20:17:45


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Ulysess
post 12.05.2011, 20:57:04
Post #5





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


  1. <?
  2. $page = file_get_contents("http://skokwesola.pl/onas/oddzialy.html");
  3.  
  4. $wzor = '~<div class="adres"><a href=".*"><strong>(.*) </strong>(.*)<br /></a>~';
  5.  
  6. preg_match_all($wzor, $page, $matches);
  7. print_r($matches);
  8. ?>

do wzoru doklejaj sobie kolejne linie i sprawdzaj czy aby na pewno działa bo od razu cały wrzucić to na 100% nie zadziała
Go to the top of the page
+Quote Post
evolucja
post 12.05.2011, 21:46:26
Post #6





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Z jedną linijką jeszcze łatwiej bo tam nie ma tych tabulatorów.
A tak wystarczy, że dodam do wzoru mały fragment i już kompletnie nic nie znajduje, np:
  1. $wzor = '~<div class="adres"><a href=".*"><strong>(.*) </strong>(.*)<br /></a>
  2. (.*) </div>
  3. <div class="telefon">~';


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
everth
post 12.05.2011, 21:58:54
Post #7





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


SimpleXML, ew. DOMDocument + loadHTML + XPath i wyciągasz co chcesz. SimpleXML czasem psioczy jak dostaje źle sformatowany HTML ale wtedy masz tą drugą klasę i jej metodę loadHTML. Obie klasy mają podobną funkcjonalność i konwertują się między sobą, więc czego użyjesz zależy już od ciebie.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
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 - 01:03