最近有做到匹配HTML页面上的某些内容的相关工作,在此总结下:
1、下载页面内容file_get_contents
具体用法:file_get_contents($url);返回值:返回整个页面字符串
2、提取页面内容
这里有两种方法,一是直接使用正则匹配,二是使用php解析HTML类库(需要下载:simple_html_dom.php),当然,也可以两类结合起来,这样用的更方便
2.1、正则匹配
$content = file_get_contents($url);
preg_match('正则表达式', $content, 存放匹配结果的数组名) //注:这个方法只匹配第一个遇到的能匹配上的内容
preg_match_all('正则表达式', $content, 存放匹配结果的数组名, PREG_PATTERN_ORDER); //注:可以匹配页面中所有符合的内容
//最后一个参数有三种类型,关于它们 的区别请自行查看
2.2、使用php解析HTML类库
先下载simple_html_dom.php(下载地址:https://github.com/samacs/simple_html_dom,地址来源于上品物语文章),将其放在项目文件夹下,导入:
include './simple_html_dom.php';
之后就可以开始使用啦!
- 新建一个dom实例:$html = new simple_html_dom();
- 加载要处理的内容:$html->load($page);
- //有三种加载方式,具体请参考上品物语博文:http://www.cnblogs.com/eczhou/archive/2013/03/15/2961354.html
- 获取内容:$mt = $html->find('div[class=mt10 clear]',0); //此例是获取<div class="mt10 clesr">......</div>内的所有内容
2.3、二者结合
看了以上两种,相信你对第三种已经有了猜想了,接下来就介绍两种的结合
- 用php解析HTML类库缩小我们所需获取内容的范围
- 使用正则匹配,把匹配函数preg_match() 或 preg_match_all() 的第二个参数换成第一步的返回值,即$mt = $html->find('div[class=mt10 clear]',0);中的$mt
是不是很简单呢?O(∩_∩)O~~