基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)


Posted in PHP onJanuary 31, 2014

1、使用curl实现站外采集

具体请参考我上一篇笔记:https://3water.com/article/46432.htm

2、编码转换
首先通过查看源代码找到采集的网站使用的编码,通过mb_convert_encoding函数进行转码;

具体使用方法:

//源字符是$str //以下已知原编码为GBK,转换为utf-8 
mb_convert_encoding($str, "UTF-8", "GBK"); 
//以下未知原编码,通过auto自动检测后,转换编码为utf-8 
mb_convert_encoding($str, "UTF-8", "auto");

3、为更好地避开换行符和空格等不定因素的阻碍,有必要先清除采集到的源码中的换行符、空格符和制表符

//方法一,使用str_replace进行替换 
$contents = str_replace("\r\n", '', $contents); //清除换行符 
$contents = str_replace("\n", '', $contents); //清除换行符 
$contents = str_replace("\t", '', $contents); //清除制表符 
$contents = str_replace(" ", '', $contents); //清除空格符 //方法二,使用正则表达式进行替换 
$contents = preg_replace("/([\r\n|\n|\t| ]+)/",'',$contents);

4、通过正则表达式匹配找出需要获得的代码段,使用preg_match_all实现该匹配

函数解释: 
int preg_match_all ( string pattern, string subject, array matches [, int flags] ) 
pattern即正规表达式 
subject即要进行查找的原文 
matches是用于储存输出结果的数组 
flags是储存的模式,包括: 
    PREG_PATTERN_ORDER;  //整个数组是二维数组,$arr1[0]是包括边界所构成匹配字符串的数组,$arr1[1]除去边界所构成的匹配字符串的数组 
    PREG_SET_ORDER;  //整个数组是二维数组,$arr2[0][0]是第一个包括边界所构成的匹配的字符串,$arr2[0][1]是第一个除去边界所构成的匹配的字符串,之后的数组以此类推 
    PREG_OFFSET_CAPTURE;  //整个数组是三维数组,$arr3[0][0][0]是第一个包括边界所构成的匹配的字符串,$arr3[0][0][1]是到达第一个匹配字符串的边界的偏移量(边界不算在内),之后以此类推,$arr2[1][0][0]是第一个包括边界所构成的匹配的字符串,$arr3[1][0][1]是到达第一个匹配字符串的边界的偏移量(边界算在内); //实际应用 
preg_match_all('/<pclass=\"content\">(.*?)<\/p>/',$contents, $out, PREG_SET_ORDER); 
$out将获取到所有匹配的元素 
$out[0][0]将是包括<pclass=\"content\"></p>在内的全段字符 
$out[0][1]将是仅包括(.*?)括号内所匹配到的字符段 
//如此类推,第n个匹配到的字段可以用以下方法取得 
$out[n-1][1] 
//若正则表达式中存大多个括号,则取得句中第m个匹配点的方法是 
$out[n-1][m]

5、取得要找到字符后,若要去掉html标签,使用PHP自带的函数strip_tags即可方便地实现

//例 
$result=strip_tags($out[0][1]);
PHP 相关文章推荐
php实现文件下载更能介绍
Nov 23 PHP
php接口与接口引用的深入解析
Aug 09 PHP
PHP设置一边执行一边输出结果的代码
Sep 30 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php mb_substr()函数截取中文字符串应用示例
Jul 29 PHP
php计算税后工资的方法
Jul 28 PHP
WordPress中使主题支持小工具以及添加插件启用函数
Dec 22 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
php curl_init函数用法
Jan 31 #PHP
curl实现站外采集的方法和技巧
Jan 31 #PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 #PHP
php使用百度翻译api示例分享
Jan 31 #PHP
php比较两个绝对时间的大小
Jan 31 #PHP
2014过年倒计时示例
Jan 31 #PHP
php curl post 时出现的问题解决
Jan 30 #PHP
You might like
来自phpguru得Php Cache类源码
2010/04/15 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
jquery处理json对象
2014/11/03 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
python比较2个xml内容的方法
2015/05/11 Python
Python subprocess库的使用详解
2018/10/26 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
在职人员函授期间自我评价分享
2013/11/08 职场文书
日语求职信范文
2013/12/17 职场文书
业务部主管岗位职责
2014/01/29 职场文书
民政局未婚证明
2015/06/15 职场文书
物资采购管理制度
2015/08/06 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
Python Socket编程详解
2021/04/25 Python
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python