千家信息网

基于curl数据采集之正则处理函数get_matches怎么用

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章将为大家详细讲解有关基于curl数据采集之正则处理函数get_matches怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。之前已经可以得到了我们需要的
千家信息网最后更新 2025年11月08日基于curl数据采集之正则处理函数get_matches怎么用

这篇文章将为大家详细讲解有关基于curl数据采集之正则处理函数get_matches怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

之前已经可以得到了我们需要的html文件,现在需要处理得到的文件获取到我们需要的采集的数据。

对于html文档的解析,没有像XML那样的解析类,因为HTML文档有很多不成对的标签,很不严格。这个时候就需要采用其他的一些辅助类了,simplehtmldom是一个类似于JQuery方式操作HTML文档的解析类。可以很方便的得到想要的数据,可惜速度慢。这里不是我们这里讨论的重点,我主要使用正则来匹配我所需要的采集的数据,可以很快速的得到我需要采集的信息。

考虑到get_html可以判断返回的数据,但是get_htmls没有办法判断,为了方便调式和调用写了如下两个函数:

复制代码 代码如下:


function get_matches($pattern,$html,$err_msg,$multi=false,$flags=0,$offset=0){
if(!$multi){
if(!preg_match($pattern,$html,$matches,$flags,$offset)){
echo $err_msg."! 错误信息: ".get_preg_err_msg()."\n";
return false;
}
}else{
if(!preg_match_all($pattern,$html,$matches,$flags,$offset)){
echo $err_msg."! 错误信息: ".get_preg_err_msg()."\n";
return false;
}
}
return $matches;
}
function get_preg_err_msg(){
$error_code = preg_last_error();
switch($error_code){
case PREG_NO_ERROR :
$err_msg = 'PREG_NO_ERROR';
break;
case PREG_INTERNAL_ERROR:
$err_msg = 'PREG_INTERNAL_ERROR';
break;
case PREG_BACKTRACK_LIMIT_ERROR:
$err_msg = 'PREG_BACKTRACK_LIMIT_ERROR';
break;
case PREG_RECURSION_LIMIT_ERROR:
$err_msg = 'PREG_RECURSION_LIMIT_ERROR';
break;
case PREG_BAD_UTF8_ERROR:
$err_msg = 'PREG_BAD_UTF8_ERROR';
break;
case PREG_BAD_UTF8_OFFSET_ERROR:
$err_msg = 'PREG_BAD_UTF8_OFFSET_ERROR';
break;
default:
return '未知错误!';
}
return $err_msg.': '.$error_code;
}


可以这样调用:

复制代码 代码如下:


$url = 'http://www.baidu.com';
$html = get_html($url);
$matches = get_matches('!!',$html,'没有找到链接',true);
if($matches){
var_dump($matches);
}


或者这样调用:

复制代码 代码如下:


$urls = array('http://www.baidu.com','http://www.hao123.com');
$htmls = get_htmls($urls);
foreach($htmls as $html){
$matches = get_matches('!!',$html,'没有找到链接',true);
if($matches){
var_dump($matches);
}
}


就可以得到所需的信息,无论单页面采集还是多页面采集,最终PHP还是只能处理一个页面,由于使用get_matches了,可以对返回的值进行判断真假,得到正确的数据,由于使用正则的时候遇到了超过正则回溯的问题,增加get_preg_err_msg来提示正则信息。

由于采集数据的时候,经常是采集列表页,根据列表页得到的内容页链接再采集内容页,或者更多的层次,那么循环嵌套会很多,对于代码的控制会感觉力不从心。那我们是否可以把采集列表页的代码和采集内容页的代码,或者更多的层次的采集代码分离开,甚至循环都简化呢?

关于"基于curl数据采集之正则处理函数get_matches怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

代码 数据 正则 信息 处理 内容 更多 函数 文档 时候 篇文章 链接 错误 页面 数据采集 层次 文件 还是 循环 不错 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 无线网络安全插画接单 人大金仓数据库简介 长春市网络安全和信息化委员会工作会议 支付宝中国网络技术中心是啥 天津电商软件开发制作 网络技术求职信格式 松江区数据链网络技术展示 天津新世纪互联网科技有限公司 中化创新科技城互联网总部大厦 校园网络安全告家长书 构建网络安全机制的途径是 财政部门如何做好网络安全 我的世界基岩版外国生存服务器 整治互联网科技企业 数据库视图有id字段吗 第一战士太子丹哪个服务器好 局域网服务器端口映射 大数据即时查询数据库 简笔画网络安全手抄报可爱 阿里开源的数据库连接池 山东计算机网络技术本科学校 有什么数据库技术 十年无人管理的服务器 桌面软件开发项目的流程 设计一个电子商务的数据库 移动硬盘怎么打开数据库 简笔画网络安全手抄报可爱 数据库空间不足 实时同步手机短信到服务器 阿里开源的数据库连接池
0