PHP SimpleHTMLDOM解析器实例

用python的时候,可以有好多好用的模块来解析html,php也有类似的开源类。

一直以来使用php解析html文档树都是一个难题。Simple HTML DOM parser 帮我们很好地解决了这个问题。可以通过这个php类来解析html文档,对其中的html元素进行操作 (PHP5+以上版本)。

解析器不仅仅只是帮助我们验证html文档;更能解析不符合W3C标准的html文档。它使用了类似jQuery的元素选择器,通过元素的 id,class,tag等等来查找定位;同时还提供添加、删除、修改文档树的功能。

<?php
require_once('simple_html_dom.php');

class grabber
{
    private $url,$html;
    public function __construct($url = null)
    {
        $this->url = $url;
    }

    public function setUrl($url)
    {
        $this->url = $url;
    }

    public function getDOM()
    {
        $this->html = file_get_html($this->url);
    }

    function retrieveTitle()
    {
        return array_shift($this->html->find('title'))->innertext;
    }

    function retrieveDescription()
    {
        return array_shift($this->html->find('meta[name="description"]'))->content;
    }

    function retrieveImgs()
    {
        $images = array();
        foreach($this->html->find('img[src]') as $img)
        {
            $images[] = $img->src;
        }
        return $images;
    }
}

$grabber = new grabber('http://movies.yahoo.com/news/movies.ap.org/merry-xmas-hollywood-boxoffice-record-falls-ap');

$grabber->getDOM();

var_dump($grabber->retrieveTitle());

var_dump($grabber->retrieveDescription());

var_dump($grabber->retrieveImgs());

 

// Create DOM from URL or file

$html = file_get_html(‘http://www.chenpeng.info/’);

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

// Find all links
foreach($html->find(‘a’) as $element)
echo $element->href . ‘<br>';
// Create DOM from string
$html = str_get_html(‘<div id=”hello”>Hello</div><div id=”world”>World</div>’);

$html->find(‘div’, 1)->class = ‘bar';

$html->find(‘div[id=hello]’, 0)->innertext = ‘foo';

echo $html; // Output: <div id=”hello”>foo</div><div id=”world”>World</div>

// Dump contents (without tags) from HTML
echo file_get_html(‘http://www.chenpeng.info/’)->plaintext;

// Create DOM from URL
$html = file_get_html(‘http://www.chenpeng.info/’);

// Find all article blocks
foreach($html->find(‘div.article’) as $article) {
$item[‘title’]     = $article->find(‘div.title’, 0)->plaintext;
$item[‘intro’]    = $article->find(‘div.intro’, 0)->plaintext;
$item[‘details’] = $article->find(‘div.details’, 0)->plaintext;
$articles[] = $item;
}

print_r($articles);

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>