基于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 相关文章推荐
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
php 方便水印和缩略图的图形类
May 21 PHP
又一个php 分页类实现代码
Dec 03 PHP
php正则表达式(regar expression)
Sep 10 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 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新手谈谈我的学习心得
2007/02/25 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
php 使用array函数实现分页
2015/02/13 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
图片之间的切换
2006/06/26 Javascript
javascript Object与Function使用
2010/01/11 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
js给selected添加options的方法
2015/05/06 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
医学护理毕业生自荐信
2013/11/07 职场文书
社区国庆节活动方案
2014/02/05 职场文书
大雁塔导游词
2015/02/04 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
MySQL优化及索引解析
2022/03/17 MySQL
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python