/ / Ako extrahovať iba určité značky z dokumentu HTML pomocou PHP? - php, xpath, tagy, obchod, webový prehľadávač

Ako extrahovať len niektoré značky z dokumentu HTML pomocou PHP?-php, xpath, Tagy, Obchod, webový prehľadávač

Používam prehľadávač na načítanie obsahu HTML určitých stránok na webe.V súčasnosti som celý obsah HTML uložený v jednej PHP premennej:

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

Čo chcem urobiť, je vybrať všetky značky "p" (napríklad) a uložiť ich do poľa. Aký je správny spôsob, ako to urobiť?

Pokúsil som sa o to nasledovným spôsobom pomocou xpathu, ale nezobrazí nič (pravdepodobne preto, že samotný dokument nie je XML, práve som skopíroval príklad uvedený v jeho dokumentácii).

$xml = new SimpleXMLElement ($string);

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

Dúfajme, že niekto s (veľa) viac skúseností v systéme PHP mi bude môcť pomôcť: D

odpovede:

1 pre odpoveď č. 1

Pozrite sa na stránku Simple HTML Dom. Bude chytiť externé stránky a spracovať ich s pomerne presnými detailmi.

http://simplehtmldom.sourceforge.net/

Môže sa použiť takto:

// 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 pre odpoveď č. 2

Skúste použiť DOMDocument spolu s DOMDocument :: getElementsByTagName, Pracovný postup by mal byť jednoduchý. Niečo ako:

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

Ktorý vráti DOMNodeList.


2 pre odpoveď č. 3

Hlasoval som za použitie regexp. Pre značku 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>";
}
}