基于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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
PHP 编程安全性小结
Jan 08 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
三种php连接access数据库方法
Nov 11 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
33道php常见面试题及答案
Jul 06 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
PHP导出带样式的Excel示例代码
Aug 28 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
thinkphp框架类库扩展操作示例
Nov 26 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
PyQt5响应回车事件的方法
2019/06/25 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
使用python去除图片白色像素的实例
2019/12/12 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
个人求职信范文分享
2014/01/31 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript