基于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中for循环语句的几种变型
Mar 16 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
php curl模拟post提交数据示例
Dec 31 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
PHP实现远程下载文件到本地
May 17 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 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
一个用于网络的工具函数库
2006/10/09 PHP
global.php
2006/12/09 PHP
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
windows系统下Python环境搭建教程
2017/03/28 Python
Python科学画图代码分享
2017/11/29 Python
Python实现翻转数组功能示例
2018/01/12 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
求职推荐信
2013/10/28 职场文书
重阳节活动总结
2014/08/27 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
小型婚礼主持词
2015/06/30 职场文书
新娘婚礼致辞
2015/07/27 职场文书
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python