php实现简单的数据采集(正则表达式筛选)


用htm+cssl做一个静态网站不难,但一个静态页似乎并不能实现数据的实时更新,但很多人都并不会php采集,今天博主就教大家一个php中最简单的采集方法 - 正则表达式匹配(略带技术含量,略懂php与html就能看懂,我尽量写详细一点)

采集思路

如果按照专业的来说,应该划分成“数据挖掘 - 数据清洗 - 打印数据”。花里胡哨,这谁听得懂, 其实通俗点的说就是“获取源代码 - 从源代码里找你要的数据 - 输出数据”
逻辑图.png

教程开始

接下来演示采集“新型冠状病毒”现存确诊人数

创建一个php代码

在写html的时候就有一个html框架,php也有自己的框架,就算文件后缀名是php也必须写,不然程序你写的是啥呀

<?php
//这里是代码书写区
?>

申明目标网站

获取源代码之前我们要先申明一个变量,申明这个变量的目的只是单纯的为了方便以后能看得懂自己的源代码,不申明也可以,但在这里博主建议申明

$url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json";

获取目标网站源码

file_get_contents($url);

这个是获取网站源码的代码,花里胡哨,说白了就是读取目标网站文件内容的东西,而默认的编码可能会出乱码,为了防止出现乱码,我们用compress.zlib://来避免乱码,最后我们再用一个变量来接收返回值
所以获取目标源代码部分应该是:

$ym = file_get_contents("compress.zlib://".$url);

从源码中提取需要的数据

源码拿到了,现在就是传说中的数据清洗的过程,既然要筛选数据,我们先写一个筛选规则,这里用正则表达式的方法筛选,因为这个教程用到的正则表达式比较简单,所以不再讲解,后期我会专门写一篇正则表达式的教程

$guize = '/"econNum":"(.*)","heconNum/isU';

php中,正则表达式格式为“定界符+表达式+定界符+修政符”"/"为定界符,“/”中间的是表达式,外边的是修正符,中间的"(.*)"及要筛选的对象
规则弄好了,现在开始提取,这个也不难,一行代码搞定

preg_match_all($guize,$ym,$jg);

这行代码的格式是"preg_match_all(规则,数据,结果);",结果以变量的形式输出

打印结果

先看代码

print_r(implode('',$jg[1]));

好,看代码,听我讲,前面的"print_r()"只不过是单纯的打印,这个不用解释,"implode('',$jg[1])"的意思是接收变量jg的数据,implode是专门接收数组的,因为我们正则表达式采集可能会采集到很多组数据,当然,我演示的只会采集到一个,多个的自己研究一下,整体的意思就是接收变量jg的1组数据(不是个数,是编号)

整体代码与总结

<?php
$url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json";
$ym = file_get_contents("compress.zlib://".$url);
$guize = '/"econNum":"(.*)","heconNum/isU';
preg_match_all($guize,$ym,$jg);
print_r(implode('',$jg[1]));
?>

看一下效果:文生截图_2020-03-10_20-44-16.png
总结:

  1. 能用变量尽量加变量,当然是建立在方便的基础上
  2. 接口配合百度语法在百度找
  3. 正则表达式一定好好学,今天涉及到的不多,但下次专门讲正则表达式一定在这个基础上讲
  4. php不难,但要养成一个语法的好习惯

不会问我,对小白负责到底

声明:文生技术博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - php实现简单的数据采集(正则表达式筛选)


做个俗人,贪财好色。