我是轻云,今天继续开坑,PHP数据采集系列。

PS:之前的WordPress主题制作系列是不是还没更新啊...

那么废话不多说,开始今天的内容(50文章庆典)

内容简要

  • 学会file_get_contents函数抓取网页内容
  • 学会做中转接口
  • 学会简易JSON数据解析

需要的技术

  • 基本的PHP常识
  • 基本的函数使用

学习内容

抓取函数

file_get_contents函数,翻译过来就是 文件_获取_内容 ,这里比较容易理解出错的地方就在很可能会把contents记成content
函数的使用方法如下:

file_get_contents('需要抓取的网址');
// 当然你要写双引号我也不反对
file_get_contents("需要抓取的网址");

制作中转接口

中转接口是什么?比如说,又一个API,网址是https://a.com/api/api.php
那么,正常情况下,人们应该访问https://a.com/api/api.php来获得API数据
但是,你想要的 占为己有(我们非常不建议你做这种不地道的事情!)就得用中转接口去实现。
也就是读取API的内容,并且写到你自己的网站上,号称是你自己的接口。这种做法和Iframe不一样,这是直接写出数据,不属于嵌套。所以,我们来看例子:

初识自带请求函数

请求函数,有哪三个呢?
$_GET $_POST $_REQUEST 这三个,它们都是一个Array数组,它们的区别是:

$_GET['参数'];
// $_GET['参数']也就是网址后?参数=的值,举个例子。网址是https://www.a.com/api/api.php?type=4k,那么你需要写上:
echo $_GET['type'];
// 就会在页面上显示4k,也就是type的值

$_POST['参数'];
// 这个不太好理解,是POST的数据。比如一个HTML代码:
<form action="finish.php" method="post"><!-- 这里的method是类型,你可以写post和get -->
    <input name="type" value="4k" placeholder="请输入类型"><br>
    <!-- 这里是一个输入框,name就是post出去的参数,也就是需要获取的type,value就是值,也就是type的值,你可以不写value,让用户去写,具体的可以百度,placeholder就是提示,br就是换行 -->
    <input type="submit" value="提交">
    <!-- 这个是提交按钮,和上一个不同,虽说是input,但不如说是提交按钮,type规定了这是一个提交按钮,value就是按钮的文字,我知道你容易写成<input type="submit">提交</input>这是不对的 -->
</form>
// 上面是一个简单的前端,下面的是finish.php的代码
echo $_POST['type'];
// 会输出什么?答案是:4k,理解了吗?不理解,我给你个形象的解释。假如刚刚的第一个input不规定value=4k,然而让用户去填写,那么用户写2k,就会输出2k

// 你问我$_REQUEST?很简单,它是get和post的结合体,翻译过来:请求
// 也就是说,它可以获取GET和POST两种的值,也就是第一个例子和第二个例子的值,我就来演示一下:
echo $_REQUEST['type'];
// GET的时候,页面会输出4k,第二种POST,也会输出4k。

代码结束,写死我了。
那么,中转接口就很明白了:

// 中转接口例子,假如这是一个根据清晰度获取影片地址的API,方式为GET,清晰度参数为type
$url = "https://www.a.com/api/api.php?type=".$_GET['type']; // 这里规定了待会要做借口的URL,最后的GET说明什么我就不多说了
$data = file_get_contents($url); // 爬取数据
echo $data; // 输出刚刚得到的数据

页面会输出什么呢?

{"code":200,"site":"https://video.a.com/4k/id_001.mp4"}

没错,这是一个JSON,显然不是我们想要的,我们只想要取site或者code的值,怎么办呢?

初识JSON解析

认识一个新函数:json_decode() 这是一个解析JSON的函数,返回数组。
用法:

json_decode(需要解析的数据,通常写变量,true);

第二个true我不知道是啥,我也懒得查,反正写true就对了
所以,写上代码:

// 中转接口例子,假如这是一个根据清晰度获取影片地址的API,方式为GET,清晰度参数为type
$url = "https://www.a.com/api/api.php?type=".$_GET['type']; // 这里规定了待会要做借口的URL,最后的GET说明什么我就不多说了
$data = file_get_contents($url); // 爬取数据
$text = json_decode($data,true); // 定义text变量为解析的JSON数组,里面包含了API返回的code和site分别的值
echo $text['code']; // 输出一下code的值
echo "<br>"; // 输出换行
echo $text['site']; // 输出获取到的地址

所以页面会返回:
200
https://video.a.com/4k/id_001.mp4
明白的,恍然大悟的,默念一句“我真棒”

后记

本期内容就到这里,只教三个内容是因为不容易写文章,下期会更加的厉害:

下期预告

  • CURL的使用
  • 关于嵌套的复杂JSON的解析
  • 伪造IP
  • 伪造headers请求头防止被反爬虫
  • 伪造Referer来爬取那些数据
  • 基本的文件读写操作
  • 实战:爬取其他网站反爬虫且防盗链的数据,并写入文件

我们,下期再见!

Last modification:August 19th, 2020 at 03:50 pm
如果这篇文章帮到了你,就打赏一下吧(只支持QQ)