基于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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
php字符串分割函数用法实例
Mar 17 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 PHP
php生成静态页面并实现预览功能
Jun 27 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 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学习之数组值的操作
2011/04/17 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
js 表格隔行颜色
2009/12/02 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
python得到单词模式的示例
2018/10/15 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python:slice与indices的用法
2019/11/25 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
业绩考核岗位职责
2014/02/01 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
村居抓节水倡议书
2014/05/19 职场文书
公司副总经理任命书
2014/06/05 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
公司给客户的感谢信
2015/01/23 职场文书
资料员岗位职责范本
2015/04/13 职场文书
检讨书模板大全
2015/05/07 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电