使用 PHP 的 Guzzle 库编写一个图片爬虫程序是一个非常常见的任务,Guzzle 是一个流行的 HTTP 请求库,允许你轻松地发送请求和处理响应。
下面是一个使用 Guzzle 编写的图片爬虫程序示例。此程序将从指定的网页中提取图片链接并将图片下载到本地。
1、安装 Guzzle
首先,确保你已经安装了 Guzzle 库。你可以通过 Composer 安装 Guzzle:
composer require guzzlehttp/guzzle
2、创建图片爬虫程序
接下来,我们创建一个 PHP 文件 image_scraper.php
,该文件会爬取指定网页中的图片链接,并将其下载到本地。
代码示例:
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Exception\GuzzleException;
use Symfony\Component\DomCrawler\Crawler;
// 创建 Guzzle 客户端
$client = new Client();
// 下载图片函数
function downloadImage($url, $savePath) {
global $client;
try {
// 发送 GET 请求获取图片数据
$response = $client->get($url, ['sink' => $savePath]);
echo "下载完成: $savePath\n";
} catch (RequestException $e) {
echo "下载失败: {$e->getMessage()}\n";
}
}
// 爬取网页中的图片链接
function scrapeImages($url, $saveDir) {
global $client;
try {
// 发送 GET 请求获取网页内容
$response = $client->get($url);
$html = (string) $response->getBody();
// 使用 DomCrawler 提取图片标签中的 src 属性
$crawler = new Crawler($html);
$images = $crawler->filter('img')->each(function (Crawler $node) {
return $node->attr('src');
});
// 确保保存目录存在
if (!is_dir($saveDir)) {
mkdir($saveDir, 0777, true);
}
// 下载每一张图片
foreach ($images as $index => $imageUrl) {
$imageUrl = filter_var($imageUrl, FILTER_VALIDATE_URL) ? $imageUrl : $url . '/' . ltrim($imageUrl, '/');
$imagePath = $saveDir . '/image_' . ($index + 1) . '.jpg';
downloadImage($imageUrl, $imagePath);
}
} catch (GuzzleException $e) {
echo "请求失败: {$e->getMessage()}\n";
}
}
// 主程序
$url = 'https://example.com'; // 替换为要爬取的网页 URL
$saveDir = 'downloaded_images'; // 图片保存目录
scrapeImages($url, $saveDir);
代码说明:
new Client()
创建一个 Guzzle HTTP 客户端实例,用于发送请求。downloadImage
函数:
sink
选项告诉 Guzzle 直接将响应的内容保存到文件中。scrapeImages
函数:
Symfony\Component\DomCrawler\Crawler
类解析网页并提取所有 <img>
标签的 src
属性值,获取图片的 URL。filter('img')
用于选择网页中的所有图片标签。each
方法用于遍历每个图片节点,提取其 src
属性并保存到数组中。downloaded_images/image_1.jpg
等。filter_var($imageUrl, FILTER_VALIDATE_URL)
判断 URL 是否为有效的绝对路径,如果不是,则拼接基 URL。mkdir($saveDir, 0777, true)
会创建保存图片的目录,如果目录不存在的话。try-catch
捕获请求失败或下载失败的错误,并打印错误消息。3、运行程序
image_scraper.php
文件。php image_scraper.php
程序会从指定的网页中提取图片 URL,并将其保存到本地目录 downloaded_images
中。
4、总结
此程序使用 Guzzle 和 Symfony 的 DomCrawler
来抓取网页中的图片并将其下载到本地。它能够处理网页中的图片 URL,并确保下载的文件保存到指定的目录中。
如果网页的图片链接是相对路径,程序会自动拼接成完整的 URL。你可以根据需要扩展此程序,例如支持下载其他类型的资源、处理不同类型的网页结构等。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有