基于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中进行身份认证
Oct 09 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
Jun 30 PHP
php数组使用规则分析
Feb 27 PHP
php实现简单的MVC框架实例
Sep 23 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
PHP链表操作简单示例
Oct 15 PHP
php的4种常用运行方式详解
Dec 22 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
php实现页面纯静态的实例代码
Jun 21 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 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
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
js Math 对象的方法
2013/09/01 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
如何快速上手Vuex
2017/02/14 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
js实现秒表计时器
2019/12/16 Javascript
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python 对象和json互相转换方法
2018/03/22 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
django富文本编辑器的实现示例
2019/04/10 Python
Python 编程速成(推荐)
2019/04/15 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
光声世纪笔试题目
2012/08/25 面试题
本科生职业生涯规划书范文
2014/01/21 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
爱心捐助活动总结
2015/05/09 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs