基于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实现图象锐化代码
Jun 14 PHP
PHP的加密方式及原理
Jun 14 PHP
php小经验:解析preg_match与preg_match_all 函数
Jun 29 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
Yii2增加验证码步骤详解
Apr 25 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
php实现留言板功能
Mar 05 PHP
关于Laravel参数验证的一些疑与惑
Nov 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
Zend引擎的发展 [15]
2006/10/09 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
js中作用域的实例解析
2017/03/16 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
python解析文件示例
2014/01/23 Python
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
企业标语大全
2014/07/01 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android