PHP实例--CURL实现简单采集

互联网上的数据非常多,有新闻网站,购物网站,视频网站,如果我们需要一些有规律的数据,如果不使用采集程序,我们就要一条条手动录入,这是一个非常大的工作量,现在我们做的采集程序可以直接采集保存到我们的数据库中而不用一条条人工录入。本例子简单实现采集功能,希望可以帮助大家减少工作量。
 
在PHP中我们可以通过编写CURL来实现采集的功能,先分析需要采集的数据的网站的特点,加入到我们的CURL的属性中来,实现我们定制采集的功能,最终得到我们需要的结果。
 
CURL的使用
preg_match_all
array_filter
explode
 
PHP中建立CURL请求的基本步骤
1 . 创建一个新CURL资源: $curl = curl_init ()
 
2 . 设置URL和相应的选项: curl_setopt ($curl,option,value)
 
常用参数:
 
CURLOPT_HEADER: 如果你想把一个头包含在输出中,设置这个选项为一个非零值。
CURLOPT_URL: 这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项。
CURLOPT_RETURNTRANSFER:如果成功只将结果返回,不自动输出任何内容。
CURLOPT_SSL_VERIFYHOST:禁用SSL证书的验证
CURLOPT_SSL_VERIFYPEER: 禁用SSL证书的验证
3 . 抓取 URL 并把它传递给浏览器:$output = curl_exec ($curl)
 
4 . 关闭 CURL 资源,并且释放系统资源:curl_close ( $ch )
 
三、开发准备
首先要查看当前PHP环境是否支持CURL.
创建并切换到code目录
 
//创建code目录
sudo mkdir /home/code
//修改code目录权限
sudo chmod -R 777 /home/code
//切换到code目录
cd /home/code
//在此目录启动php内置服务器
sudo php -S localhost:80
新建文件phpinfo.php文件并编辑:
 
<?php
phpinfo();
?>
页面上搜索CURL,如下图是支持CURL。
 
 
 
如果不支持的话请修改php.ini中;extension=php_curl.dll前的;去掉,重新启动PHP服务器就可以了。
 
1 简单的采集
CURl简单实现获取一个网站页面功能
在 /home/code 新建一个 curltest.php 文件,抓取实验楼首页,并输出到页面:
 
<?php
//1.初始化,创建一个新cURL资源
$curl=curl_init();
//2.设置URL和相应的选项,我们采集`https://www.shiyanlou.com/`页面
curl_setopt($curl, CURLOPT_URL, "https://www.shiyanlou.com/");
//因为实验楼的地址为https,所以参数为 false 代表不检查ssl证书
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//如果你想把一个头包含在输出中,设置这个选项为一个非零值
curl_setopt($curl, CURLOPT_HEADER, 0);
//3.执行并获取结果
curl_exec($curl);
//释放CURL
curl_close($curl);
?>
代码执行效果如下,页面展示效果可能会比较乱,因为一些 js 和 css 文件的引用地址会失效,但是这并不影响我们获取数据。
 
 
 
实现文字替换
上面实验只是输出实验楼的页面,我们也可以在输出的时候把页面上数据修改,创建curlreplace.php文件,我们把页面中的所有的"实验楼"修改为"我喜欢在实验楼学习"例子如下。
 
<?php
//1.初始化,创建一个新cURL资源
$curl=curl_init();
//2.设置URL和相应的选项,我们采集`https://www.shiyanlou.com/`页面
curl_setopt($curl, CURLOPT_URL, "https://www.shiyanlou.com/");
//因为实验楼的地址为https,所以参数为 false 代表不检查ssl证书
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//如果你想把一个头包含在输出中,设置这个选项为一个非零值
curl_setopt($curl, CURLOPT_HEADER, 0);
// 执行之后不直接打印出来
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//3.执行并获取结果
$resault=curl_exec($curl);
//4.释放CURL
curl_close($curl);
//把页面中的实验楼修改为我喜欢在实验楼学习
echo str_replace("实验楼","我喜欢在实验楼学习",$resault);
?>
 
 
3.开始页面采集
本次实验用来采集实验楼课程,url地址为https://www.shiyanlou.com/courses/.
 
这个页面中的课程的图片和标题,我要采集下来存入数据库中。
 
我们查看这个页面的源码可以看出我们所需要的图片地址的规律。
 
 
 
查看源代码,我们可以看到课程标题和课程图片都有固定的格式,我们就可以使用正则表达式把内容匹配出来。
 
 
 
此处为把标题匹配,我们可以使用preg_match_all匹配的数组是一个二维数组。
 
preg_match_all() 函数用于执行一个全局正则表达式匹配
 
语法:
 
//第一个参数为匹配的正则表达式,第二个为要匹配的字符串,第三个为所有匹配结果(数组)
preg_match_all (pattern, subject, matches)
我们找到样式为course-title所有span 

猜你喜欢

转载自www.cnblogs.com/sj-php/p/11940048.html
今日推荐