php实现的一个很好用HTML解析器类可用于采集数据
2023-06-13 09:15:05 时间
<?php
$oldSetting=libxml_use_internal_errors(true);
libxml_clear_errors();
/**
*
*-+-----------------------------------
*|PHP5Framework-2011
*|WebSite:www.iblue.cc
*|E-mail:mejinke@gmail.com
*|Date:2012-10-12
*-+-----------------------------------
*
*@descHTML解析器
*@authorjingke
*/
classXF_HtmlDom
{
private$_xpath=null;
private$_nodePath="";
publicfunction__construct($xpath=null,$nodePath="")
{
$this->_xpath=$xpath;
$this->_nodePath=$nodePath;
}
publicfunctionloadHtml($url)
{
ini_set("user_agent","Mozilla/5.0(Linux;U;Android2.1;en-us;NexusOneBuild/ERD62)AppleWebKit/530.17(KHTML,likeGecko)Version/4.0MobileSafari/530.17?Nexus");
$content="";
if(strpos(strtolower($url),"http")===false)
{
$content=file_get_contents($url);
}
else
{
$ch=curl_init();
$user_agent="Baiduspider+(+http://www.baidu.com/search/spider.htm)";
$user_agent1="Mozilla/5.0(WindowsNT5.1;rv:6.0)Gecko/20100101Firefox/6.0";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_REFERER,$url);
curl_setopt($ch,CURLOPT_USERAGENT,$user_agent1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
$content=curl_exec($ch);
curl_close($ch);
}
$html=newDOMDocument();
$html->loadHtml($content);
$this->_xpath=newDOMXPath($html);
//return$this;
}
publicfunctionfind($query,$index=null)
{
if($this->_nodePath=="")
$this->_nodePath="//";
else
$this->_nodePath.="/";
$nodes=$this->_xpath->query($this->_nodePath.$query);
//echo$nodes->item(0)->getNodePath();exit;
if($index==null&&!is_numeric($index))
{
$tmp=array();
foreach($nodesas$node)
{
$tmp[]=newXF_HtmlDom($this->_xpath,$node->getNodePath());
}
return$tmp;
}
returnnewXF_HtmlDom($this->_xpath,$this->_xpath->query($this->_nodePath.$query)->item($index)->getNodePath());
}
/**
*获取内容
*/
publicfunctiontext()
{
if($this->_nodePath!=""&&$this->_xpath!=null)
return$this->_xpath->query($this->_nodePath)->item(0)->textContent;
else
returnfalse;
}
/**
*获取属性值
*/
publicfunctiongetAttribute($name)
{
if($this->_nodePath!=""&&$this->_xpath!=null)
return$this->_xpath->query($this->_nodePath)->item(0)->getAttribute($name);
else
returnfalse;
}
publicfunction__get($name)
{
if($name=="innertext")
return$this->text();
else
return$this->getAttribute($name);
}
}
$xp=newxf_HtmlDom();
$xp->loadHtml("http://www.aizhan.com/siteall/www.opendir.cn/");
$rows=$xp->find("td[@id="baidu"]/a",0)->innertext;
print_r($rows);
相关文章
- PHP官方手册研读--php的垃圾回收机制
- 数据快速学习:使用 PHP 读取 MySQL 数据(php读取mysql)
- PHP与MySQL:搭建你的Web应用(php和mysql)
- jquery与php的HTML转义与反转义详解编程语言
- 环境搭建PHP在Linux下的环境搭建与应用(php用linux)
- PHP实现从MySQL数据库中读取信息(php读取mysql数据)
- 文档为何使用Linux创建HTML文档?(linux创建html)
- PHP在Linux上的安装(php安装linux)
- 使用PHP操作Redis:简单灵活的方法(php如何使用redis)
- Linux下部署PHP网站的指南(linux部署php网站)
- 深入理解MySQL转义在PHP中的应用技巧(mysql转义php)
- Android实现PHP连接MySQL进行数据交互(android通过php连接mysql)
- 使用PHP遍历MySQL数据库 – 一步一步教程(php遍历mysql)
- PHP解决MSSQL数据库乱码问题(php解决mssql乱码)
- PHP与MSSQL结合,提高数据查询效率(php能连mssql)
- PHP连接MSSQL:让你更快更好地实现数据互通(php接mssql)
- php数据结构与算法(PHP描述)查找与二分法查找