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

yizhihongxing

首先需要确保服务器已经安装了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日

相关文章

  • 自动发帖机的斗争过程防止垃圾评论的几个方法总结

    自动发帖机的斗争过程防止垃圾评论的几个方法总结 在网站中,自动发帖机和垃圾评论是我们常遇到的问题。下面我们将介绍几种常见的方法来防止这些问题的发生。 防止自动发帖机的方法 1. 添加验证码 添加验证码是最简单和最常见的方法。验证码可以使用数字、字母或符号组合而成的图片,可以有效地防止自动发帖机对网站进行攻击。 下面是一个示例: <form action…

    PHP 2023年5月27日
    00
  • PHP指定截取字符串中的中英文或数字字符的实例分享

    下面我会详细讲解一下“PHP指定截取字符串中的中英文或数字字符的实例分享”的完整攻略。 1. substr()函数 PHP提供了一个内置函数substr(),可以用来截取字符串。该函数的语法如下: string substr ( string $string , int $start [, int $length ] ) 其中,$string为需要截取的字符…

    PHP 2023年5月26日
    00
  • php7连接MySQL实现简易查询程序的方法

    下面是详细的攻略: PHP7连接MySQL实现简易查询程序 前置条件 在开始编写PHP7连接MySQL实现简易查询程序之前,需要先确保以下条件: 已经安装了PHP7和MySQL数据库 确认已经能够通过PHP连接MySQL 连接MySQL 首先,需要在PHP中建立与MySQL数据库的连接。这可以通过使用 mysqli_connect() 函数来实现。 <…

    PHP 2023年5月30日
    00
  • 解析php取整的几种方式

    以下是关于解析 PHP 取整的几种方式的完整攻略。 一、使用 ceil() 函数进行向上取整 ceil() 函数是 PHP 内置的一个函数,该函数可以将传入的参数进行向上取整。 <?php $num = 5.3; echo ceil($num); //输出 6 ?> 二、使用 floor() 函数进行向下取整 floor() 函数是 PHP 内置…

    PHP 2023年5月26日
    00
  • PHP验证码类文件及调用方式代码详解

    让我为大家详细讲解一下“PHP验证码类文件及调用方式代码详解”的完整攻略。 什么是验证码? 验证码(CAPTCHA)是指计算机程序为了判断用户是否为机器人或恶意程序而设计的一种测试。通常只有人类才能通过这种测试,这是因为验证码的目的就是要通过对抗机器学习和自动化脚本,来防止恶意程序负责恶意攻击或者注册大量垃圾账户。 如何生成验证码? 生成验证码的方式非常多,…

    PHP 2023年5月26日
    00
  • php注册登录系统简化版

    下面我将给您详细讲解“PHP注册登录系统简化版”的完整攻略。 概述 “PHP注册登录系统简化版”是一个常见的Web应用程序,可以让用户通过注册和登录实现对某些资源的访问。在这个系统中,用户可以注册账号,登录系统,修改密码和注销账号。 技术要点 要实现“PHP注册登录系统简化版”,需要掌握以下技术要点: PHP基础知识:掌握PHP语法和流程控制语句; MySQ…

    PHP 2023年5月24日
    00
  • 微信小程序实现图片上传放大预览删除代码

    下面是微信小程序实现图片上传、放大预览、删除的完整攻略: 1. 实现图片上传 在小程序中,可以使用wx.chooseImage()方法实现图片的上传,该方法会调起用户手机的相册或相机,返回选择的图片信息。 首先,需要在页面中添加一个按钮,绑定一个事件函数,该函数调用wx.chooseImage()方法,实现图片上传。 ### WXML代码 <butto…

    PHP 2023年5月23日
    00
  • PHP实现通过二维数组键值获取一维键名操作示例

    下面是详细讲解“PHP实现通过二维数组键值获取一维键名操作示例”的完整攻略: 前置知识 在了解如何通过二维数组键值获取一维键名之前,需要首先掌握以下知识: PHP中的数组(Array):数组是一种用于存储数据的变量类型,常用于存储一组有序的数据。 数组的键和值:在PHP中,数组的每个元素都有一个键和一个值,其中键用于访问数组中的元素,值则是存储在数组中的数据…

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