本次要完成的工作是得到一个网站下的相应标签。
在开始之前,我先介绍一下提取标签所要用到的类:
- DOMDocument类:可以看作是一个HTML或XML文档类
- loadHTMLFile方法:完成对某个url文档的提取
- getElementsByTagName($tag):根据标签得到一个DOMNodeList对象
- DOMNodeList类:HTML文档中标签节点的集合,可以通过foreach进行遍历得到DOMElement对象
- DOMElement类:HTML元素节点类,可以直接进行处理
- nodeValue:提取元素值
- attributes:属性集合,可以通过foreach进行遍历处理将其保存到数组中
- hasAttribute方法:查看该元素是否有属性
- getAttribute($attr):得到相应属性的值
知道了提取网站信息基本类之后,通过一个类来封装提取网站信息所需要的方法
class Hoover{
private $content=null; //DOMDocument对象
//1.得到目标网站的内容,php7新增DOMDocument类,返回一个实例对象,loadHTMLFile用于提取网站的内容,增加$content属性节省代码
public function getContent($url){
}
//2.提取感兴趣的标签,getElementsByTagName(),*表示提取所有标签
public function getTags($url, $tag){
}
//3.提取感兴趣的属性,例如:href属性对应的链接是否在相应域内,在则保留
public function getAttribute($url, $attr, $domain=NULL){
}
}
getContent()方法:获取url中的内容,返回一个DOMDocument类对象
public function getContent($url){
if(!$this->content){
if(stripos($url, 'https') !== 0){
//获取url中https首次出现的位置,查看url是否正确
//构建url
$url = 'https://'.$url;
}
$this->content = new \DOMDocument('1.0','utf-8'); //得到一个DOMDocument类
$this->content->preserveWhiteSpace = false; //去掉冗余的空格
//加载网站的内容到该对象中,@符号用于忽略HTML文件中的错误
@$this->content->loadHTMLFile($url);
}
return $this->content;
}
getTags($url, $tag):根据url和标签tag来获得网站中指定标签内容并返回一个保存信息的数组
public function getTags($url, $tag){
$count = 0;
$result = array();
$elements &