如何使用PHP从HTML文档中仅提取某些标签?

时间:2012-03-27 20:10:00

标签: php xpath tags store web-crawler

我正在使用抓取工具检索网络上某些网页的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

3 个答案:

答案 0 :(得分:3)

尝试使用DOMDocumentDOMDocument::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>';