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设计模式的注册树模式

    简介: 注册树模式,属于结构型的设计模式。一种很简单的设计模式 适用场景: 类似IOC。写一个庞大的类库的时候,为了方便各种资源的归纳,可以统一放到一棵树上。 优点: 把一个个游兵散将一样的对象进行统一管理。 另外可以根据项目的业务场景自定义层级。 缺点: 增加项目的复杂性。 纯粹的注册树写法,缺少单例模式的有点,可能存在重复创建对象的可能,需要做额外的验证…

    PHP 2023年4月18日
    00
  • phpt文件内容解析

    phpt测试文件说明 phpt文件用于PHP的自动化测试,这是PHP用自己来测试自己的测试数据用例文件。 测试脚本通过执行PHP源码根目录下的run-tests.php,读取phpt文件执行测试。 phpt文件包含 TEST,FILE,EXPECT 等多个段落的文件。在各个段落中,TEST、FILE、EXPECT是基本的段落, 每个测试脚本都必须至少包括这三…

    PHP 2023年4月19日
    00
  • 介绍几个array库的新函数 php

    在 PHP 中,数组(array)是一种非常常用的数据类型。PHP 提供了许多方便的内置函数来处理和操作数组。除了标准的数组函数外,PHP5.1及以上版本还提供了 SPL 扩展中的多种数组迭代器。同时,自 PHP 5.4.0 版本后,引入了两个新的数组函数:array_replace_recursive()和array_column()。我们来一一介绍它们:…

    PHP 2023年5月26日
    00
  • 微信小程序自定义toast弹窗效果的实现代码

    下面就来详细讲解“微信小程序自定义toast弹窗效果的实现代码”的完整攻略。 1. 简介 在开发微信小程序时,我们通常需要使用一些弹窗效果,如toast弹窗,在显示提示信息时非常方便。本文将详细讲解实现微信小程序自定义toast弹窗效果的代码实现步骤,以及给大家提供两个示例说明。 2. 实现步骤 2.1 弹窗样式 首先,我们需要创建一个弹窗的样式,这里我们使…

    PHP 2023年5月23日
    00
  • 通过PHP简单实例介绍文件上传

    文件上传是Web开发中常见的功能之一,用户可以通过将本地文件上传到服务器,实现数据传输和共享。PHP提供了丰富的函数和扩展库来处理文件上传操作。本文将通过一个简单的实例,介绍PHP如何实现文件上传。 如何实现文件上传 创建上传界面HTML代码 文件上传需要用户界面来触发操作,一般是HTML表单,可以通过<input>标签的type=file属性来…

    PHP 2023年5月23日
    00
  • 微信小程序 网络通信实现详解

    微信小程序网络通信实现详解 本文将详细讲解微信小程序的网络通信实现,包括如何发起网络请求、如何处理请求的回调函数、如何使用WebSocket等等。同时,本文将提供两个示例说明,以帮助读者更好地理解和应用本文所述内容。 发起网络请求 发起网络请求是小程序中最常见的网络通信方式之一,一般用来向服务器请求数据。小程序中可以使用wx.request()函数来发起网络…

    PHP 2023年5月30日
    00
  • PHP获取文件后缀名的三个函数

    获取文件后缀名是一个常见的操作,也是PHP应用开发中经常用到的技巧。以下是三个常用三个函数的详细介绍和使用示例。 1. pathinfo函数 pathinfo函数可以返回文件路径的信息,包括文件名、目录名、基本名称和扩展名等。可以通过传入不同的参数返回不同的文件信息,其中参数可选包括PATHINFO_DIRNAME(目录名)、PATHINFO_BASENAM…

    PHP 2023年5月26日
    00
  • 继续收藏一些PHP常用函数第1/2页

    下面是详细讲解“继续收藏一些PHP常用函数第1/2页”的完整攻略: 收集常用PHP函数的方法 方法一:查看官方文档 PHP官方文档中有详细的函数列表和说明,可以直接在PHP官方文档网站上查看并学习。 方法二:查看大牛分享 除了官方文档,很多PHP开发者经常会在自己的博客或社交媒体上分享自己常用的PHP函数。可以在网络上搜索相关资料,查看大牛的分享和经验总结。…

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