我正在使用抓取工具检索网络上某些网页的HTML内容。我目前将整个HTML存储在一个PHP变量中:
$string = "<PRE>".htmlspecialchars($crawler->results)."</PRE>\n";
我想要做的是选择所有“p”标签(例如)并将它们存储在一个数组中。这样做的正确方法是什么?
我通过使用xpath尝试了以下内容,但它没有显示任何内容(很可能是因为文档本身不是XML,我只是复制粘贴其文档中给出的示例)。
$xml = new SimpleXMLElement ($string);
$result=$xml->xpath('/p');
while(list( , $node)=each($result)){
echo '/p: ' , $node, "\n";
}
希望有(很多)PHP经验的人能够帮助我:D
答案 0 :(得分:3)
尝试使用DOMDocument和DOMDocument::getElementsByTagName。工作流程应该非常简单。类似的东西:
$doc = DOMDocument::loadHTML(htmlspecialchars($crawler->results));
$pNodes = $doc->getElementsByTagName('p');
将返回DOMNodeList。
答案 1 :(得分:2)
我投票使用正则表达式。对于标签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>";
}
}
答案 2 :(得分:1)
查看Simple HTML Dom。它将抓取外部页面并以相当准确的细节处理它们。
http://simplehtmldom.sourceforge.net/
可以像这样使用:
// 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>';