• PHP Simple HTML DOM 使用


    下载地址:https://github.com/samacs/simple_html_dom

    文档地址 http://simplehtmldom.sourceforge.net/

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

    解析器不仅仅只是帮助我们验证html文档;更能解析不符合W3C标准的html文档。它使用了类似jQuery的元素选择器,通过元素的id,class,tag等等来查找定位;同时还提供添加、删除、修改文档树的功能。当然,这样一款强大的html Dom解析器也不是尽善尽美;在使用的过程中需要十分小心内存消耗的情况。不过,不要担心;本文中,笔者在最后会为各位介绍如何避免消耗过多的内存。

    安装:下载后把simple_html_dom.php 引入即可

    开始使用

    上传类文件以后,有三种方式调用这个类:

    从url中加载html文档

    从字符串中加载html文档

    从文件中加载html文档

    // Create a DOM object
    $html = new simple_html_dom();

    // Load HTML from a string
    $html->load('<html><body>Hello!</body></html>');

    // Load HTML from a URL 
    $html->load_file('http://www.google.com/');

    // Load HTML from a HTML file 
    $html->load_file('test.htm');

    如果从url加载html文档,需要先从网络上下载。建议使用cURL来抓取html文档并加载DOM中。

    api文档http://simplehtmldom.sourceforge.net/manual_api.htm

    DOM的方法
     
    $html = file_get_html('http://www.google.com/');        //$html 所拥有的方法如下表所示
    $html->clear() ;                                                              //调用方法
     
    DOM methods & properties 
    NameDescription
    void
    __construct ( [string $filename] )
    Constructor, set the filename parameter will automatically load the contents, either text or file/url.
     string
    plaintext
    Returns the contents extracted from HTML.
    void
    clear ()
    Clean up memory.
    void
    load ( string $content )
    Load contents from a string.
    string
    save ( [string $filename] )
    Dumps the internal DOM tree back into a string. If the $filename is set, result string will save to file.
    void
    load_file ( string $filename )
    Load contents from a from a file or a URL.
    void
    set_callback ( string $function_name )
    Set a callback function.
    mixed
    find ( string $selector [, int $index] )
    Find elements by the CSS selector. Returns the Nth element object if index is set, otherwise return an array of object.

     
       

    //查找a
    foreach($html->find('a') as $elem)
    {
    echo $elem->href.'-->'.$elem->innertext.'<br/>';
    }

    // Find (N)th anchor, returns element object or null if not found (zero based)
    $ret = $html->find('a', 0);

    // Find lastest anchor, returns element object or null if not found (zero based)
    $ret = $html->find('a', -1); 

    // Find all <div> with the id attribute
    $ret = $html->find('div[id]');

    // Find all <div> which attribute id=foo
    $ret = $html->find('div[id=foo]');  类似jquery属性过滤器
     
    // Find all element which id=foo
    $ret = $html->find('#foo');

    // Find all element which class=foo
    $ret = $html->find('.foo');

    // Find all element has attribute id
    $ret = $html->find('*[id]'); 
    ($product=$table->find("#product *[selected]",0)->innertext ; )不能写成#product[selected].
    // Find all anchors and images 
    $ret = $html->find('a, img'); 

    // Find all anchors and images with the "title" attribute
    $ret = $html->find('a[title], img[title]');
     
    // Find all <li> in <ul> 
    $es = $html->find('ul li');

    // Find Nested <div> tags
    $es = $html->find('div div div'); 

    // Find all <td> in <table> which class="hello" 
    $es = $html->find('table.hello td');

    // Find all td tags with attribite align=center in table tags 
    $es = $html->find(''table td[align=center]');
     
     
    5. Element  的方法
     
    $e = $html->find("div"0);                              //$e 所拥有的方法如下表所示
     
    Attribute NameUsage
    $e->tag Read or write the tag name of element.
    $e->outertext Read or write the outer HTML text of element.
    $e->innertext Read or write the inner HTML text of element.
    $e->plaintext Read or write the plain text of element.
     
    // Example
    $html = str_get_html("<div>foo <b>bar</b></div>"); 
    $e = $html->find("div"0);

    echo $e->tag// Returns: " div"
    echo $e->outertext// Returns: " <div>foo <b>bar</b></div>"
    echo $e->innertext// Returns: " foo <b>bar</b>"
    echo $e->plaintext; // Returns: " foo bar"
    (注意,与dom中不同,innertext包含html标签)
     
    6.DOM traversing 方法
     
    MethodDescription
    mixed
    $e->children ( [int $index] )
    Returns the Nth child object if index is set, otherwise return an array of children.
    element
    $e->parent ()
    Returns the parent of element.
    element
    $e->first_child ()
    Returns the first child of element, or null if not found.
    element
    $e->last_child ()
    Returns the last child of element, or null if not found.
    element
    $e->next_sibling ()
    Returns the next sibling of element, or null if not found.
    element
    $e->prev_sibling ()
    Returns the previous sibling of element, or null if not found.

    // Example
    echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id;
    // or 
    echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');
     

    如何自定义解析行为?回调函数

    // Write a function with parameter "$element"
    function my_callback($element) {
            // Hide all <b> tags 
            if ($element->tag=='b')
                    $element->outertext = '';


    // Register the callback function with it's function name
    $html->set_callback('my_callback');

    // Callback function will be invoked while dumping
    echo $html;
  • 相关阅读:
    自定义navigationItem与button的几种状态
    NSLog自动识别运行环境是发布还是测试(release |debug),从而决定是否需要打印。
    今天学了一个简单的新技能Xcode6以后创建工程后没有.pch文件,所以来个技能
    APP内部调用短信 、电话、邮件
    ShareSDK
    表视图的基本概念
    高仿新浪微博APP
    高仿网易新闻APP
    UI常用基本控件 的使用
    属性的介绍--OC语言
  • 原文地址:https://www.cnblogs.com/youxin/p/3557581.html
Copyright © 2020-2023  润新知