Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parsowanie - wyciąganie ze źródła tekstu
Forum PHP.pl > Forum > PHP
newb1e
Przykładowa część ze źródła pewnej strony:
  1. <div class="left">
  2.  
  3. <h1 class="title">
  4. Seagate 500 GB Barracuda 7200.12 (16MB, Serial ATA II) </h1>
  5.  
  6. <div class="code">
Chciałbym teraz za pomocą preg_match wyciągnąć tekst pomiędzy <h1 class="title"></h1> jednak w żaden sposób nie umiem tego zrobić. Nie chcę tego robić za pomocą strpos.
  1. $zmienna = preg_match(/<h1 class=\"title\">(.*)<\/h1>/i, $zrodlo, $tablica);
Niestety takie coś nie działa. Podejrzewam, że to przez te spacje. W jaki sposób to wyciągnąć? Za pomocą preg_match? Chyba, że jeszcze inny sposób poza strpos.
athei
Modyfikatora "s" zapomniałeś
Kod
/<h1 class=\"title\">(.*)<\/h1>/is

albo
Kod
#<h1 class=\"title\">(.*)</h1>#is

Obrób sobie to co pobierze, bo będą tam znaki nowej linii i spacje.
newb1e
Działa, ale teraz znowu jak pobiorę źródło strony:
  1. $strona = file_get_contents("http://www.strona.pl/test.html");
  2. preg_match('/<h1 class=\"title\">(.*)<\/h1>/is', $strona, $nazwa);
  3. print_r($nazwa);
to tablica jest pusta.
Patrząc w debugerze $strona ma taki wartość po użyciu file_get_contents:
  1. <div class=\"left\">\n\n <h1 class=\"title\">\n Seagate 500 GB Barracuda 7200.12 (16MB, Serial ATA II) </h1>\n\n
Jak w takim razie z tego wyciągnąć Seagate 500 GB Barracuda 7200.12 (16MB, Serial ATA II)?
muk4
  1. $text = 'XXX'; //Tutaj twoj pobrany HTML
  2. $pattern = '/h1 class="title">(.*)<\/h1>/';
  3. $text = str_replace(PHP_EOL, '', $text);
  4. preg_match($pattern,$text,$matches);
  5. echo $matches[1];
newb1e
Niestety to też nie działa. Może to problem w moich ustawieniach albo coś. Najlepiej jakbym podał linka i ktoś u siebie by spróbował tylko tu nie mogę podać linka, bo ostatnio dałem i został usunięty biggrin.gif może na PW wysłać komuś?
muk4
Poprawiony kod:

  1. $url = 'http://www.komputronik.pl/index.php/product/101512/Peryferia/Monitory_LCD/22_iiyama_ProLite_B2209HDSD_czarny.html';
  2. $text = file_get_contents($url);
  3. $search = array("\n", "\t", " ", " ");
  4. $text = str_replace($search, '', $text);
  5. $text = substr($text, 11680,8500);
  6. $pattern = '/h1 class="title">(.*)<\/h1>/';
  7. preg_match($pattern,$text,$matches);
  8. echo $matches[1];
wookieb
PHPQUERY !
newb1e
Więc sprawa wygląda następująco:
  1. $url = 'http://www.komputronik.pl/index.php/product/65058/Podzespo_y_PC/Dyski_twarde/Seagate_500_GB_Barracuda_7200_12_16MB_Serial_ATA_II_.html';
  2. $text = file_get_contents($url);
  3. $search = array("\n", "\t");
  4. $text = str_replace($search, '', $text);
  5. $text = substr($text, 20000, 8000);
  6. $pattern = '#h1 class="title">(.*)<\/h1>#is';
  7. preg_match($pattern,$text,$matches);
  8. echo $matches[1];
To działa bez zarzutów.
Natomiast:
  1. $url = 'http://www.komputronik.pl/index.php/product/65058/Podzespo_y_PC/Dyski_twarde/Seagate_500_GB_Barracuda_7200_12_16MB_Serial_ATA_II_.html';
  2. $text = file_get_contents($url);
  3. $search = array("\n", "\t");
  4. $text = str_replace($search, '', $text);
  5. //$text = substr($text, 20000, 8000);
  6. $pattern = '#h1 class="title">(.*)<\/h1>#is';
  7. preg_match($pattern,$text,$matches);
  8. echo $matches[1];
Już nie działa. Mimo, że tekst w $text jest taki sam tylko dłuższy to tablica jest już pusta. Po prostu nie ma wtedy wyników żadnych. Co może być powodem? preg_match nie sięga tak daleko w głąb kodu czy co laugh.gif
everth
Jezu, oblukajcie i zmodyfikujcie sobie ten skrypt
newb1e
Ok. Najprostsze rozwiązanie ->
  1. function parseHtml($path)
  2. {
  3. $path = file_get_contents($path);
  4. $doc = new DOMDocument();
  5. @$doc->loadHTML($path);
  6. $xpath = new DOMXPath($doc);
  7. $entries = $xpath->query("//h1[@class='title']");
  8. $resultString;
  9. foreach ($entries as $node) {
  10. $resultString .= $doc->saveXML($node);
  11. }
  12. return $resultString;
  13. }
  14. $path='http://www.komputronik.pl/index.php/product/65058/Podzespo_y_PC/Dyski_twarde/Seagate_500_GB_Barracuda_7200_12_16MB_Serial_ATA_II_.html';
  15. echo parseHtml($path);
Działa idealnie biggrin.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.