PHP通过CURL实现定时任务的图片抓取功能示例

首先需要确保服务器已经安装了CURL扩展。接下来按照以下步骤进行PHP通过CURL实现定时任务的图片抓取功能:

第一步:设置获取的数据URL

首先,需要确定要从哪个URL获取数据。如果目标URL需要进行验证授权才能访问数据,则在此步骤中需要确定相应的验证授权方式,并获取授权信息。

例如,从以下URL获取一张图片:https://www.example.com/image.jpg

第二步:设置CURL选项

接下来,需要设置CURL选项来配置CURL扩展与目标URL交互。例如,设置CURL选项:

// 初始化CURL
$curl = curl_init();
// 设定URL
curl_setopt($curl, CURLOPT_URL, 'https://www.example.com/image.jpg');
// 设定目标文件
$outputFile = '/path/to/save/image.jpg';
$fp = fopen($outputFile, 'w');
curl_setopt($curl, CURLOPT_FILE, $fp);
// 设定超时
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
// 执行CURL
curl_exec($curl);
// 关闭文件句柄和CURL资源
fclose($fp);
curl_close($curl);

此例中,设定CURL选项的代码中,我们使用了curl_setopt()函数来设置CURL扩展的各种选项,比如设置URL、目标文件路径、超时时限等。

代码会将图片保存到指定目录下,由于文件有可能被多次访问(多次执行定时任务),需要为图片文件名添加时间戳或者其他标识符避免图片被覆盖。

第三步:设置定时任务

将以上代码封装到一个PHP文件中,然后可以使用Linux系统的crontab命令或者是Windows系统的任务计划程序来定时调用此文件,并完成图片抓取操作。

例如,将定时任务设置为每天的早晨4点钟执行:

0 4 * * * /usr/bin/php /path/to/file/image_grab.php

此例中,0 4 * * *表示每天的4点执行,/usr/bin/php /path/to/file/image_grab.php表示要执行的PHP文件的路径和文件名。

示例说明:

以上过程是一个基本的通过CURL实现定时任务的图片抓取的流程,可以根据具体的需求调整代码和设置。

以爬取百度图片为例,可以参考以下示例说明:

示例1:爬取百度图片榜单图片

首先需要找到终端用户访问的链接,以百度图片的热门“猫咪”的榜单图片为例,可以找到以下链接:https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=1592006711200_R&pv=&ic=0&nc=1&z=0&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=猫咪

然后需要分析页面内容,以确定从哪些元素中获取特定的图片链接,可以使用浏览器自带的开发工具分析。

本例中,选择获取每张图片的“data-objurl”属性,使用以下代码爬取:

$url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=1592006711200_R&pv=&ic=0&nc=1&z=0&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=猫咪';
$outputPath = '/path/to/images/';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$html = curl_exec($curl);
curl_close($curl);

preg_match_all('/"data-objurl":"(.*?)"/', $html, $matches);

foreach ($matches[1] as $imageUrl) {
    $imageData = file_get_contents($imageUrl);
    $imageFileName = basename($imageUrl);
    file_put_contents($outputPath . $imageFileName, $imageData);
}

示例2:爬取CDN资源

有些资源可能分布在多个CDN,需要循环获取这些资源。

本例中,以pinterest中国站点为例,可以爬取热门推荐图片:https://www.pinterest.cn/

获取方式为在浏览器中查看资源加载情况,分析页面cdn资源发现该站的图片均在以下cdn中:i.pinimg.com、s-media-cache-ak0.pinimg.com、i.pximg.net、64.media.tumblr.com、pinimg.com、source.unsplash.com

将这些域名存储到数组中:

$cdnDomains = [
    'i.pinimg.com',
    's-media-cache-ak0.pinimg.com',
    'i.pximg.net',
    '64.media.tumblr.com',
    'pinimg.com',
    'source.unsplash.com'
];

用以下示例代码实现循环从CDN中获取图片:

$outputPath = '/path/to/images/';
foreach ($cdnDomains as $domain) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "https://{$domain}/explore/");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    $html = curl_exec($curl);
    curl_close($curl);

    preg_match_all('/<img.*?src="(.*?)"/', $html, $matches);
    foreach ($matches[1] as $imageUrl) {
        $imageData = file_get_contents($imageUrl);
        $imageFileName = basename($imageUrl);
        file_put_contents($outputPath . $domain. "_" . $imageFileName, $imageData);
    }
}

以上是一个简单的示例,可以根据需要进行扩展更改,例如:
- 增加异常处理,处理CURL扩展执行时出现的异常错误;
- 增加代理IP,解决反爬虫限制;
- 配置请求头,模拟用户请求;
- 通过数据库记录图片信息,避免获取重复图片等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP通过CURL实现定时任务的图片抓取功能示例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • php常用字符串输出方法分析(echo,print,printf及sprintf) 原创

    PHP常用字符串输出方法分析 在PHP中,输出字符串是我们经常要面对的问题,我们需要掌握一些常用的输出方法来输出我们想要的内容。本文主要介绍PHP常用的四种字符串输出方法echo、print、printf和sprintf。 echo echo是PHP中最常用的字符串输出函数,可以输出一个或多个字符串,语法格式如下: echo string1, string2…

    PHP 2023年5月26日
    00
  • PHP实现微信退款的方法示例

    下面是关于“PHP实现微信退款的方法示例”的完整攻略: 1.准备工作 在进行微信退款前,我们需要确保已经完成以下准备工作: 1.1 已经在微信公众平台中创建了应用,并且获得了appid和mchid等信息。 1.2 已经生成了证书文件,包括apiclient_cert.pem和apiclient_key.pem。 1.3 已经开通了微信支付的退款功能。 2.退…

    PHP 2023年5月23日
    00
  • php生成静态html页面的方法(2种方法)

    生成静态HTML页面是提升网站性能和搜索引擎优化的常用手段。下面介绍两种使用PHP生成静态HTML页面的方法。 方法一:使用ob_start()和ob_get_contents()函数 使用ob_start()和ob_get_contents()函数可以将PHP页面内容读取到缓存中,最后再将内容输出到HTML文件中,即可生成静态HTML页面。 示例代码: &…

    PHP 2023年5月26日
    00
  • PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)

    PHP入门教程之自定义函数用法详解 创建自定义函数 在PHP中,可以使用function语句来创建自定义函数。语法如下: function functionName(parameter1, parameter2, …) { // 函数体 return value; } 其中,functionName为函数名,parameter1, parameter2等…

    PHP 2023年5月23日
    00
  • PHP常见数学函数及BC高精度数学函数用法示例

    首先我们要明确一下本文要讲解的主要内容——PHP常见数学函数及BC高精度数学函数用法示例。 一、PHP常见数学函数 abs() 函数 该函数用于返回一个数的绝对值。例如: $num = -9; echo abs($num); // output: 9 ceil() 函数 该函数用于对一个数进行向上取整操作。例如: $num = 3.14; echo ceil…

    PHP 2023年5月23日
    00
  • THINKPHP5.1 Config的配置与获取详解

    THINKPHP5.1的Config是一个非常实用的配置类库,它可以让我们更加方便地对整个项目进行全局性、模块性的参数设置,还能进行灵活的获取和赋值。下面,我们将详细介绍该类库的使用方法与注意事项,包括参数配置、使用方法、命名空间、默认值等问题。 参数配置 在THINKPHP5.1中,我们使用app/config目录下的文件来进行参数配置,如果要配置数据库连…

    PHP 2023年5月23日
    00
  • PHP定时执行任务的3种方法详解

    PHP定时执行任务的3种方法详解 在Web开发中,经常会需要定时执行某些任务,比如清理缓存、备份数据等。PHP作为一种流行的Web编程语言,自然也提供了实现定时任务的方法。本文将详细介绍PHP定时执行任务的3种方法,分别是: 1.使用PHP内置的定时器实现 2.使用Crontab实现 3.使用外部工具库实现 使用PHP内置的定时器实现 PHP提供了set_t…

    PHP 2023年5月23日
    00
  • php判断一个数组是否为有序的方法

    要判断一个数组是否为有序,首先需要确定什么是“有序”的定义。通常情况下,有序数组是指按照一定的规则排序过的数组,例如从小到大或从大到小排列的元素。基于这个定义,可以采用以下方法来判断一个PHP数组是否为有序的。 一、 使用sort函数 sort函数是PHP自带的用于数组排序的函数,可以按照升序或降序排列整数、字符串和其他类型的数组元素。如果一个数组已经是有序…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部