基于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 相关文章推荐
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
如何判断php数组的维度
Jun 10 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
CI框架常用函数封装实例
Nov 21 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 PHP
php5与php7的区别点总结
Oct 11 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 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
我的论坛源代码(三)
2006/10/09 PHP
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
javascript去掉前后空格的实例
2013/11/07 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
Python中的包和模块实例
2014/11/22 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
基于python实现学生管理系统
2018/10/17 Python
Python爬取成语接龙类网站
2018/10/19 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
详解Django admin高级用法
2019/11/06 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
python属于解释型语言么
2020/06/15 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
世界遗产导游词
2015/02/13 职场文书
2015年副班长工作总结
2015/05/15 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书