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

spider分享--图片

免责声明:本文仅作分享!!!

# -*- coding: utf-8 -*-
import os
import requests
import urllib.parse
from concurrent.futures import ThreadPoolExecutor
from time import sleep# 请求的基本 URL 和用户代理
url0 = 'https://image.baidu.com/search/acjson?'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36'
}# 定义爬虫的主函数
def fetch_image(url, save_dir, image_index):try:# 请求图片的JSON数据response = requests.get(url, headers=headers)response.raise_for_status()data = response.json()# 遍历获取到的图片链接for i in range(30):try:image_url = data['data'][i]['middleURL']print(f"图片链接获取:{image_url}")# 下载图片image_data = requests.get(image_url, headers=headers, timeout=5)image_data.raise_for_status()# 图片保存路径image_path = os.path.join(save_dir, f"{image_index}图片.png")with open(image_path, 'wb') as file:file.write(image_data.content)print(f"正在下载:{image_index}")image_index += 1sleep(0.5)  # 为了避免请求过快,加入短暂延时except requests.exceptions.RequestException as e:print(f"下载图片时发生错误: {e}")except requests.exceptions.RequestException as e:print(f"请求图片数据时发生错误: {e}")# 获取用户输入并验证
def get_user_input():name = input("请输入查询内容(如:猫,狗,风景等):")while True:try:shnm = int(input('请输入爬取的页数:'))if shnm <= 0:raise ValueError("页数必须大于 0")return name, shnmexcept ValueError as e:print(f"无效输入:{e}, 请重新输入")# 创建文件夹(如不存在)
def create_directory(dir_name):if not os.path.exists(dir_name):os.mkdir(dir_name)return dir_name# 主函数
def main():# 获取用户输入name, shnm = get_user_input()save_dir = create_directory(name)  # 创建保存图片的文件夹nums = 120  # 每页返回的图片数量page_executor = ThreadPoolExecutor(max_workers=5)  # 限制最大并发请求数为 5image_index = 1for s in range(shnm):nums += 30  # 每页加30,翻到下一页data = {"tn": "resultjson_com", "logid": "", "ipn": "rj", "ct": "201326592", "is": "","fp": "result", "fr": "", "word": name, "cg": "head", "queryWord": name,"cl": "", "lm": "", "ie": "utf-8", "oe": "utf-8","adpicid": "", "st": "", "z": "", "ic": "", "hd": "","latest": "", "copyright": "", "s": "", "se": "", "tab": "", "width": "","height": "", "face": "", "istype": "", "qc": "", "nc": "", "expermode": "","nojc": "", "isAsync": "", "pn": nums, "rn": "30", "gsm": "78",}da = urllib.parse.urlencode(data)  # 将参数转换为 URL 编码url = url0 + da  # 拼接完整的 URL# 提交请求到线程池page_executor.submit(fetch_image, url, save_dir, image_index)page_executor.shutdown(wait=True)  # 等待所有线程执行完成print("爬虫任务完成!")# 执行主函数
if __name__ == "__main__":main()

http://www.xdnf.cn/news/981055.html

相关文章:

  • 如何使用deepseek满血版
  • 语音合成之二十 VITS模型详解与MeloTTS实现
  • PCB设计教程【大师篇】STM32开发板原理图设计(接口部分)
  • 基于生成对抗网络(GAN)的图像生成与编辑:原理、应用与实践
  • CTFshow-PWN-栈溢出(pwn52)
  • 【Docker基础】Docker核心概念:容器(Container)详解
  • Spring详解【2】
  • 数据定义以及数据类型
  • 盒模型小全
  • MySQL查看连接情况
  • 解锁Flink CDC:实时数据同步秘籍
  • windows电脑解决笔记本搜索不到wifi问题
  • 通过flv.js在网页中拉流进行视频播放
  • C# TextBox 控件限制输入字符为十六进制字符串
  • Java@Data 与 @NotNull 注解冲突问题
  • 火山引擎大模型系列都有什么内容
  • 从认识AI开始-----生成对抗网络(GAN):通过博弈机制,引导生成
  • 博客:基本框架设计(下)
  • 牛市与熊市:市场周期的双面镜
  • 力扣上C语言编程题:最大子数组和(涉及数组)
  • TikTok数据采集软件避坑指南:代理/IP轮换/账号封禁问题一站解决
  • CAMEL中涉及获取 GOOGLE_API_KEY 和 SEARCH_ENGINE_ID 这两个值
  • 【时时三省】(C语言基础)寄存器变量( register变量)和全局变量的存储类别
  • 曼昆《经济学原理》第九版 第十七章寡头垄断
  • (简单介绍)反事实场景counterfactual scenarios
  • 树莓派超全系列教程文档--(63)rpicam-apps可用选项介绍之常用选项
  • 绝缘胶垫怎么选择,耐压、防滑、厚度、质量参数如何选择?
  • [学习] C语言结构体与联合体的对比分析
  • 网络层 IP协议(第一部分)
  • Web前端基础之HTML