当前位置: 首页 > news >正文

Laravel5 抓取第三方网站图片,存储到本地

背景

  • 近期发现,网站上的部分图片无法显示,
    分析发现,是因为引用的第三方网站图片(第三方服务器证书已过期)
    想着以后显示的方便
    直接抓取第三方服务器图片,转存到本地服务器
  • 思路
	1. 查询数据表,确认待转存的图片链接2. 代码抓取图片,转存到本地服务器的一个指定目录中3. 使用 redis 集合,存储已操作的图片链接,避免后续重复抓取4. 更改数据表 存储记录,替换链接

代码参考

  • 以链接:https://pic2.zhimg.com/gift/v2-8d3f288feae0e511dee5c3d6735ca999_r.jpg 为例
        /*** @notes:图片抓取代码* @param string $url* @throws \GuzzleHttp\Exception\GuzzleException* @author: zhanghj* @Time: 2024/10/28 10:00*/public function grabImages($url = ''){$start_str = 'https://';$file_name = explode('/gift/',$url)[1]??'';if (strpos($url,$start_str)===0){//查询是否已存在$redis_key = 'mz_uu_b1b_images';$isMember = Redis::sIsMember($redis_key,$file_name);if ($isMember){logger()->warning('已存在:'.$file_name);}else{$_set = ['verify' => false, 'http_errors' => false];$client = new Client($_set);$response = $client->get($url);$contents = $response->getBody()->getContents();$localPath = "uub1b/{$file_name}"; // 假设下载的图片都是JPEG格式Storage::put($localPath, $contents);Redis::sAdd($redis_key,$file_name);logger()->warning('已抓取:'.$url);}}//echo 'Image downloaded successfully!';}

数据表,记录替换更新

  • 参考 mysql 执行语句如下:
UPDATE cms_igoods
SET img = CASEWHEN INSTR(img, 'https://xx.mix.com/pointshopproduct/gift') > 0 THEN REPLACE(img, 'https://xx.mix.com/pointshopproduct/gift', 'uub1b_img')ELSE img
END
WHERE integralgoodid > 0;
http://www.lryc.cn/news/471887.html

相关文章:

  • DevOps和CI/CD以及在微服务架构中的作用
  • Rust 力扣 - 5. 最长回文子串
  • DDOS防护介绍
  • 深入了解 kotlinx-datetime:配置与使用指南
  • Qt编程技巧小知识点(6)根据 *IDN? 对程控仪器连接状态进行确认
  • 【Android】Kotlin教程(4)
  • 机票电子行程单如何批量查验?Java机票电子行程单查验接口示例-发票查验接口
  • 记录element-ui改造select显示为table,并支持多查询条件
  • Spearman、Pearson、Euclidean、Cosine、Jaccard,用来衡量不同数据之间的相似性或差异性
  • Suno 歌曲生成 API 对接说明
  • 详细且系统的Spring Boot应用开发
  • 线程支持库(C++11)
  • 【计网】深入理解NAT机制,内网穿透与内网打洞,代理服务
  • C# 创建型设计模式----工厂模式
  • java中Scanner的nextLine和next方法
  • 2024年全国山洪径流模拟与洪水危险性评价技术及典型地区洪水淹没及损失分析
  • CDC 同步数据需要的MySQL数据权限
  • Ubuntu20.04 更新Nvidia驱动 + 安装CUDA12.1 + cudnn8.9.7
  • 算法自学 Lesson3 - 逻辑回归(LR)
  • 文件IO流
  • 拥塞控制与TCP子问题(粘包问题,异常情况等)
  • stm32入门教程--DMA 超详细!!!
  • 【使用Flask构建RESTful API】从零开始开发简单的Web服务!
  • 用sdcc给51单片机编译C程序
  • Java Lock LockSupport 源码
  • Elasticsearch基础操作入门
  • 跨域问题解决办法
  • 【数据结构与算法】力扣 23. 合并 K 个升序链表
  • Java Lock CountDownLatch 总结
  • vue+spreadjs开发