基于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 UBB 解析实现代码
Nov 27 PHP
PHP判断变量是否为0的方法
Feb 08 PHP
phpmailer中文乱码问题的解决方法
Apr 22 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
php插入mysql数据返回id的方法
May 31 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 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轻松实现中英文混排字符串截取
2014/05/28 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
Vue 监听元素前后变化值实例
2020/07/29 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
Python秒算24点实现及原理详解
2019/07/29 Python
python Django 创建应用过程图示详解
2019/07/29 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
汽车专业毕业生推荐信
2013/11/12 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
技术负责人岗位职责
2015/02/10 职场文书
火烧圆明园观后感
2015/06/03 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript