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ď č. 1Pozrite 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>";
}
}