有时候会有需要从一个HTML页面来分离出你需要的一些数据来进行处理。

当然自己分析文件肯定可以,但是比较快速且方便的是使用正则表达式或者DOM。

鉴于正则表达式我不熟悉,所以我打算使用DOM来完成。

先谈谈我的需求,我要从一个HTML页面的一个表格中提取数据并且将这个数据整理出来加入到MySQL数据库中。

假设目标HTML中我感兴趣的Table有3列,分别是ID,Name,内容。

index.php;

<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
require_once('ContentManager.php');
//建立Dom对象,分析HTML文件;
 $htmDoc = new DOMDocument;
 $htmDoc->loadHTMLFile($urlTarget );
 $htmDoc->normalizeDocument();
//获得到此文档中每一个Table对象;
 $tables_list = $htmDoc->getElementsByTagName('table');
//测试Table Count;
 $tables_count = $tables_list->length;
 foreach ($tables_list as $table)
 {
 //得到Table对象的class属性
 $tableProp = $table->getAttribute('class');
 if ($tableProp == 'target_table_class')
 {
 $contentMgr = new ContentManager();
 $contentMgr->ParseFromDOMElement($table);
//这里myParser就完成了分析动作。然后就可以进行需要的操作了。
 //比如写入MySQL。
 $contentMgr->SerializeToDB();
 }
 }
 ?>

ContentManager.php

<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 * Description of ContentParser
 *
 * @author xxxxx
 */
 require_once('ContentInfo.php');
 class ContentManager {
 //put your code here
 var $ContentList;
 public function __construct() {
 $this->ContentList = new ArrayObject();
 }
public function ParseFromDOMElement(DOMElement $table)
 {
 $rows_list = $fundsTable->getElementsByTagName('tr');
 $rows_length = $rows_list->length;
 $index = 0;
foreach ($rows_list as $row)
 {
 $contentInfo = new ContentInfo();
 $contentInfo->ParseFromDOMElement($row);
 $this->ContentList->append ($contentInfo);
 }
//test how many contents parsed.
 $count = $this->fundsInfoArray->count();
 echo $count;
 }
public function SerializeToDB()
 {
 //写入数据库,代码略。
 }
 }
?>

contentinfo.php

<?php
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
/**
 * Description of ContentInfo
 *
 * @author xxxxx
 */
class ContentInfo {
    //put your code here
    var $ID;
    var $Name;
    var $Content;
    public function ParseFromDOMElement(DOMElement $row)
    {
        $cells_list = $row->getElementsByTagName('td');
        $cells_length = $row->length;
 
        $curCellIdx = 0;
        foreach ($cells_list as $cell)
        {
            switch ($curCellIdx++)
            {
                case 0:
                    $this->ID = $cell->nodeValue;
                    break;
                case 1:
                    $this->Name = $cell->nodeValue;
                    break;
                case 2:
                    $this->Content = $cell->nodeValue;
                    break;
            }
        }
    }
}
 
?>

一点小心得,DOM中每个Element都可以getAttribute取出属性,这些属性可以区分你分析的DOMObject。

举例来说,比如上述我分析的Target HTML有很多表格,但是我发现目标表格的class属性和其他表格是不一样的。

所以,这个属性就可以来区分我要分析的是哪个表格。

当然更多DOM的东西,大家可以去参考PHP Manual或者是,用IDE(NetBeans7.0就可以)转到类声明,看类接口。

有方法使用说明以及参数说明。可以参考参考。

转载自:http://blog.csdn.net/xyzhaopeng/article/details/6626340

最新文章

  1. 分享一个 @user 前端插件
  2. 验证ASP.NET页生命周期时间的触发顺序
  3. Javascript 中的严格模式
  4. 沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)
  5. Java 自动装箱与拆箱
  6. Hadoop 分布式文件系统 - HDFS
  7. postgresql plpythonu例子
  8. MSSQLSERVER数据库- 触发器
  9. linux-kernel/CodingStyle
  10. oracle参数优化
  11. SVN权限修复
  12. 工作中遇到的浏览器差别(就不叫IE6bug了)
  13. Docker容器的跨主机连接
  14. 【Luogu3121】审查(AC自动机)
  15. (Code) Python implementation of phrase extraction from sentence
  16. 【官方下载】EasyCMDB官方基础版免费下载使用!
  17. JSP学习1---创建一个简单的jsp程序
  18. 通信导论-IP数据网络基础(1)
  19. 使整个页面变灰的css代码
  20. **测试某系统切换成docker部署之后性能的下降情况**

热门文章

  1. git合并远端分支到本地分支的两种方式
  2. 各种oracle参数查询语句
  3. 给Notepad++ 6.7 加右键菜单带图标
  4. Android adb端口转发调试助手Packet Sender
  5. 客户端Webview重定向
  6. [译]Java 垃圾回收介绍
  7. 我的Android 4 学习系列
  8. 【jar包】图片的异步加载--【 Imageloader】
  9. WCF、Web API、WCF REST、Web Service 区别
  10. Oracle琐碎笔记2