基于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和MySQL保存和输出图片
Oct 09 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
解析link_mysql的php版
Jun 30 PHP
php数组保存文本与文本反编成数组实例
Nov 13 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
学习PHP Cookie处理函数
Aug 09 PHP
php mysql 封装类实例代码
Sep 18 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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 htmlspecialchars加强版
2010/02/16 PHP
php中Smarty模板初体验
2011/08/08 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
smarty中post用法实例
2014/11/28 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
JS截取字符串常用方法详细整理
2013/10/28 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
[53:15]Mineski vs iG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Django的视图(View)外使用Session的方法
2015/07/23 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
将python图片转为二进制文本的实例
2019/01/24 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
体育老师的教学自我评价分享
2013/11/19 职场文书
企业员工薪酬方案
2014/06/04 职场文书
2015年植树节活动总结
2015/02/06 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
祝酒词范文
2015/08/12 职场文书
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers