基于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 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
PHP验证码类代码( 最新修改,完全定制化! )
Dec 02 PHP
php调用google接口生成二维码示例
Apr 28 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
Jun 12 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
php动态函数调用方法
May 21 PHP
微信公众号判断用户是否已关注php代码解析
Jun 24 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 PHP
Yii框架自定义数据库操作组件示例
Nov 11 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
PHP基于ip2long实现IP转换整形
Dec 11 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 ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
php 文章采集正则代码
2009/12/28 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
php多进程应用场景实例详解
2019/07/22 PHP
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
js同源策略详解
2015/05/21 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
树结构之JavaScript
2017/01/24 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
Python字符串处理函数简明总结
2015/04/13 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
python 换位密码算法的实例详解
2017/07/19 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
python super函数使用方法详解
2020/02/14 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
酒店总经理职务说明书
2014/02/26 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
个人授权委托书
2014/09/15 职场文书
岗位职责范本大全
2015/02/26 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
基于Python的EasyGUI学习实践
2021/05/07 Python