基于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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
PHP_MySQL教程-第一天
Mar 18 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 PHP
PHP长连接实现与使用方法详解
Feb 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
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
laravel请求参数校验方法
2019/10/10 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
python抓取网页内容示例分享
2014/02/24 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python自动点赞功能的实现思路
2020/02/26 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
董事长职责范文
2013/11/08 职场文书
接待员岗位职责
2015/02/13 职场文书
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL