/ / Jak wyodrębnić tylko niektóre znaczniki z dokumentu HTML za pomocą PHP? - php, xpath, tagi, sklep, przeszukiwacz sieci

Jak wyodrębnić tylko niektóre tagi z dokumentu HTML za pomocą PHP? - php, xpath, tagi, sklep, robota sieciowego

Używam przeszukiwacza do pobierania zawartości HTML niektórych stron w sieci. Obecnie cały HTML jest przechowywany w jednej zmiennej PHP:

$string = "<PRE>".htmlspecialchars($crawler->results)."</PRE>n";

Chcę wybrać wszystkie znaczniki „p” (na przykład) i zapisać je w tablicy. Jaki jest właściwy sposób na to?

Próbowałem, używając xpath, ale niczego nie pokazuje (najprawdopodobniej dlatego, że sam dokument nie jest XML, po prostu skopiowałem wklejony przykład podany w jego dokumentacji).

$xml = new SimpleXMLElement ($string);

$result=$xml->xpath("/p");
while(list( , $node)=each($result)){
echo "/p: " , $node, "n";
}

Mam nadzieję, że ktoś z (dużo) większym doświadczeniem w PHP będzie w stanie mi pomóc: D

Odpowiedzi:

1 dla odpowiedzi № 1

Sprawdź Simple HTML Dom. Będzie pobierać strony zewnętrzne i przetwarzać je z dość dokładnymi szczegółami.

http://simplehtmldom.sourceforge.net/

Może być używany w ten sposób:

// Create DOM from URL or file
$html = file_get_html("http://www.google.com/");

// Find all images
foreach($html->find("img") as $element)
echo $element->src . "<br>";

3 dla odpowiedzi № 2

Spróbuj użyć DOMDocument wraz z DOMDocument :: getElementsByTagName. Przepływ pracy powinien być dość prosty. Coś jak:

$doc = DOMDocument::loadHTML(htmlspecialchars($crawler->results));
$pNodes = $doc->getElementsByTagName("p");

Który zwróci listę DOMNodeList.


2 dla odpowiedzi nr 3

Głosuję na użycie regexp. Dla tagu p

preg_match_all("/<p>(.*)</p>/", "<p>foo</p><p>foo 1</p><p>foo 2</p>", $arr, PREG_PATTERN_ORDER);
if(is_array($arr))
{
foreach($arr as $value)
{
echo $value."</br>";
}
}