Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >用PHP的Guzzle库编写的图片爬虫程序

用PHP的Guzzle库编写的图片爬虫程序

原创
作者头像
华科云商小徐
发布于 2025-03-13 02:00:01
发布于 2025-03-13 02:00:01
7000
代码可运行
举报
文章被收录于专栏:小徐学爬虫小徐学爬虫
运行总次数:0
代码可运行

使用 PHP 的 Guzzle 库编写一个图片爬虫程序是一个非常常见的任务,Guzzle 是一个流行的 HTTP 请求库,允许你轻松地发送请求和处理响应。

下面是一个使用 Guzzle 编写的图片爬虫程序示例。此程序将从指定的网页中提取图片链接并将图片下载到本地。

1、安装 Guzzle

首先,确保你已经安装了 Guzzle 库。你可以通过 Composer 安装 Guzzle:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
composer require guzzlehttp/guzzle

2、创建图片爬虫程序

接下来,我们创建一个 PHP 文件 image_scraper.php,该文件会爬取指定网页中的图片链接,并将其下载到本地。

代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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);

代码说明:

  1. Guzzle 客户端
    • 使用 new Client() 创建一个 Guzzle HTTP 客户端实例,用于发送请求。
  2. downloadImage 函数
    • 这个函数接收图片的 URL 和保存路径,发送 GET 请求获取图片并将其保存到指定路径。
    • sink 选项告诉 Guzzle 直接将响应的内容保存到文件中。
  3. scrapeImages 函数
    • 发送 GET 请求获取网页 HTML 内容。
    • 使用 Symfony\Component\DomCrawler\Crawler 类解析网页并提取所有 <img> 标签的 src 属性值,获取图片的 URL。
    • filter('img') 用于选择网页中的所有图片标签
    • each 方法用于遍历每个图片节点,提取其 src 属性并保存到数组中。
    • 为每个图片 URL 下载并保存图片,保存路径为 downloaded_images/image_1.jpg 等。
  4. 相对路径问题
    • 如果图片链接是相对路径,代码会自动将它转换为绝对路径。filter_var($imageUrl, FILTER_VALIDATE_URL) 判断 URL 是否为有效的绝对路径,如果不是,则拼接基 URL。
  5. 文件夹创建
    • mkdir($saveDir, 0777, true) 会创建保存图片的目录,如果目录不存在的话。
  6. 错误处理
    • 使用 try-catch 捕获请求失败或下载失败的错误,并打印错误消息。

3、运行程序

  1. 将上述代码保存为 image_scraper.php 文件。
  2. 运行 PHP 文件:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php image_scraper.php

程序会从指定的网页中提取图片 URL,并将其保存到本地目录 downloaded_images 中。

4、总结

此程序使用 Guzzle 和 Symfony 的 DomCrawler 来抓取网页中的图片并将其下载到本地。它能够处理网页中的图片 URL,并确保下载的文件保存到指定的目录中。

如果网页的图片链接是相对路径,程序会自动拼接成完整的 URL。你可以根据需要扩展此程序,例如支持下载其他类型的资源、处理不同类型的网页结构等。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用Soup库的Haskell程序去下载图片
想要通过Haskell的HTTP请求库下载图片,并且提到了使用Soup库。Soup库应该是指http-conduit或者相关的扩展库,比如http-client和http-client-tls,因为之前记得这些库通常一起使用来处理网络请求和解析内容。
华科云商小徐
2025/03/11
270
Node爬虫:利用Node.js爬取网页图片的实用指南
在互联网时代,图片是信息传递和展示的重要组成部分,而提取网页中的图片数据对于一些项目和需求来说尤为重要。本文将详细介绍如何使用Node.js编写爬虫程序,实现网页图片的批量爬取,帮助您轻松获得所需的图片数据,并揭示一些实用技巧和注意事项。
用户614136809
2023/09/25
1.1K0
Symfony DomCrawler 库爬取图片实例
在当今互联网时代,网络爬虫技术已经成为信息获取和数据分析的重要工具之一。本文将详细介绍如何利用Symfony DomCrawler库,结合代理设置和HTML内容解析,实现对搜狐网站图片的爬取,并展示实际代码和效果。
小白学大数据
2023/12/12
2340
Fast Web Scraping With ReactPHP
What is Web Scraping? Have you ever needed to grab some data from a site that doesn’t provide a publ
猿哥
2019/07/25
8480
Symfony DomCrawler库在反爬虫应对中的应用
在当今信息爆炸的时代,互联网上的数据量巨大,但这也带来了一些问题,比如恶意爬虫可能会对网站造成严重的影响,导致资源浪费和服务不稳定。为了解决这个问题,许多网站采取了反爬虫策略。Symfony DomCrawler库是一个强大的工具,可以帮助我们在反爬虫应对中起到重要的作用。
小白学大数据
2024/05/11
1360
使用Crawler实例进行网页内容抓取
网页内容抓取的背景 随着互联网的快速发展,网页上的信息量日益庞大。如何从海量的网页中快速、准确地抓取所需信息,成为了一个技术挑战。网页内容抓取技术通过自动化的方式,模拟用户浏览网页的过程,获取网页上的文本、图片、链接等信息。
小白学大数据
2024/09/25
1860
利用axios库的爬虫程序如何使用HTTP
在 JavaScript 中,axios 是一个非常流行的 HTTP 客户端库,它可以用来发送各种 HTTP 请求(如 GET, POST 等),并处理响应。我们可以使用 axios 来编写一个简单的爬虫程序,该程序抓取网页内容并提取需要的信息。
华科云商小徐
2025/03/12
950
用R语言的XML库写一个采集图片的爬虫程序
朋友让我用R语言的XML库写一个采集图片的爬虫程序。首先,我需要确认XML库是否适合这个任务。XML库主要用于解析XML和HTML内容,但R里面还有其他库如rvest可能更方便。不过朋友特别提到了XML库,所以必须用它。
华科云商小徐
2025/03/06
460
揭秘Symfony DomCrawler库的爬虫魔力:获取网易新闻热点
在这个信息爆炸的时代,新闻热点不仅仅是传递信息的渠道,它们还能够影响和引导公众舆论。Symfony DomCrawler库作为一个强大的爬虫工具,可以帮助我们理解这种现象,通过获取和分析网易新闻热点,我们可以洞察舆情的走向。
jackcode
2024/04/08
1290
揭秘Symfony DomCrawler库的爬虫魔力:获取网易新闻热点
如何使用 DomCrawler 进行复杂的网页数据抓取?
在互联网时代,数据是宝贵的资源。无论是市场分析、客户洞察还是内容聚合,从网页中抓取数据都是一项关键技能。Symfony 的 DomCrawler 是一个强大的工具,可以帮助开发者从复杂的网页中提取所需的数据。本文将详细介绍如何使用 DomCrawler 进行复杂的网页数据抓取。
小白学大数据
2024/09/27
1520
使用 Curl 和 DomCrawler 下载抖音视频链接并存储到指定文件夹
假设我们需要从抖音平台上下载一些特定的视频,以便进行分析、编辑或其他用途。为了实现这个目标,我们需要编写一个爬虫程序来获取抖音视频的链接,并将其保存到本地文件夹中。
小白学大数据
2023/11/01
7930
Java实战:使用HttpClient实现图片下载与本地保存
在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求。其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都显得尤为重要。无论是社交媒体平台、电商平台,还是个人项目,能够高效地下载并保存图片到本地,对于提升用户体验和优化数据处理流程都有着不可忽视的作用。本文将通过一个具体的Java实战案例,详细介绍如何使用Apache HttpClient库实现图片的下载与本地保存功能。
小白学大数据
2025/02/27
1610
data pipeline是做什么_pycharm创建爬虫项目
爬取爱套图网图片:https://github.com/EExplode/scrapy_aitaotu
全栈程序员站长
2022/10/05
4230
基于Java爬取微博数据(四) 获取 图片 or 视频
既然已经掌握了 基于 Java 爬取微博正文列表内容,爬取微博用户主页内容以及导出爬取到的微博数据、加载微博正文长文本等操作,那么你是否有疑问,微博中的图片和视频也想爬取,又该怎么做呢?那么下面讲述一下如何处理微博正文中的图片/视频等内容。
六月的雨在Tencent
2024/09/24
2770
利用HttpClient库下载蚂蜂窝图片
网络爬虫技术作为互联网数据获取的重要工具,在各行各业都有着广泛的应用。而在本文中,我们将利用Java中的HttpClient库,通过编写一个简单而有效的网络爬虫程序,实现下载蚂蜂窝网站的图片的功能。通过这个例子,我们不仅可以学习如何利用HttpClient库进行网络请求,还可以探索网络爬虫的基本原理和实现方法。
小白学大数据
2024/04/23
1390
Symfony Panther在网络数据采集中的应用
在当今数字化时代,网络数据采集已成为获取信息的重要手段之一。Symfony Panther,作为Symfony生态系统中的一个强大工具,为开发者提供了一种简单、高效的方式来模拟浏览器行为,实现网络数据的采集和自动化操作。本文将通过一个实际案例——使用Symfony Panther下载网易云音乐,来展示其在网络数据采集中的应用。
小白学大数据
2024/06/03
1530
C++下载器程序:如何使用cpprestsdk库下载www.ebay.com图片
本文介绍了如何使用C++语言和cpprestsdk库编写一个下载器程序,该程序可以从www.ebay.com网站上下载图片,并保存到本地文件夹中。为了避免被网站屏蔽,我们使用了爬虫代理服务提供的代理IP地址,以及多线程技术提高下载效率。
jackcode
2023/10/12
3330
C++下载器程序:如何使用cpprestsdk库下载www.ebay.com图片
Ktor库使用HTTP编写了一个下载程序
使用 Ktor 库编写一个下载程序也是非常简单的,Ktor 是一个强大的 Kotlin 网络框架,支持 HTTP 请求和响应,适用于构建客户端和服务器应用。
华科云商小徐
2025/03/12
550
Fuel 爬虫:Scala 中的图片数据采集与分析
互联网上的图片资源丰富多样,涵盖了从社交媒体到新闻媒体、从艺术作品到科学研究的各个领域。这些图片不仅是视觉信息的载体,更是数据挖掘和分析的重要对象。通过爬取和分析图片数据,我们可以实现图像识别、内容分类、情感分析等多种应用。本文将介绍如何使用 Scala 和 Fuel 库构建一个高效的图片数据采集与分析爬虫,从技术实现到实际应用,为读者提供一个完整的解决方案。
小白学大数据
2025/03/11
600
Fuel 爬虫:Scala 中的图片数据采集与分析
PHP远程抓取网站图片
PHP远程抓取网站图片并保存在文件中,虽然是原生PHP写的,但也值得一看(用yii2.0.15.1的时候实践过)
友儿
2022/09/11
3.9K0
推荐阅读
相关推荐
利用Soup库的Haskell程序去下载图片
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验