【Python】有大量美图只会一张张保存吗,python教你一键保存

前言

嗨嗨,大家好啊,最近对cos有点感兴趣,但是啊,只是喜欢看图,不是想自己cos哈
看到美女就忍不住一张张保存,但是吧这样有些麻烦,就想着看能不能用python解决一下
所以…嘿嘿 这篇文章就出来了
请添加图片描述

正文

开发环境:

  • Python 3.8
  • Pycharm

模块使用:

第三方模块 需要安装 在cmd里面 进行 pip install requests / parsel

  • requests
  • parsel

如何安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests)
    回车
  2. 在pycharm中点击Terminal(终端) 输入安装命令

实现基本思路:

一. 数据来源分析:

1、分析这些图片url地址在哪?

  • 开发者工具抓包分析, 分析图片链接在什么地方

I. F12 打开开发者工具 --> 刷新网页 <让本网页数据内容重新加载一遍>

II. 通过 Img 可以找图片url地址

-------------------分析图片url地址可以从哪里获得-----------------------

III. 通过图片链接参数 去搜索 数据从哪里来的

获取所有图集 —> 获取所有图集详情页url --> 目录页面发送请求

二. 代码实现步骤

  1. 发送请求, 对于图集目录页发送请求
  2. 获取数据, 获取服务器返回响应数据
  3. 解析数据, 提取我们想要 图集详情页url地址
  4. 发送请求, 对于图集详情页url地址 发送请求
  5. 获取数据, 获取服务器返回响应数据
  6. 解析数据, 提取图片url地址 以及标题
  7. 保存数据, 把图片内容 保存本地文件夹

在这里插入图片描述

在这里插入图片描述

代码

源代码 【点击领取】

# 导入数据请求模块  --> 第三方模块 需要 在cmd里面 pip install requests
import requests
# 导入数据解析模块  --> 第三方模块 需要 在cmd里面 pip install parsel
import parsel
# 导入正则模块 --> 内置模块 不需要安装
import re
# 导入文件操作模块 --> 内置模块 不需要安装
import os.path

在这里插入图片描述

# 构建翻页
for page in range(2, 450):
    # format 字符串格式化方法
    print(f'正在采集第{
      
      page}页的数据内容')
    # 确定请求url地址  <目录页>

在这里插入图片描述

伪装 请求头 防止被反爬

    headers = {
    
    
        # 浏览器基本身份信息
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }

发送请求

通过requests模块里面get请求方法, 对于url地址发送请求, 并且携带上headers请求头伪装, 最后用自定义变量response接受返回数据

    response = requests.get(url=url, headers=headers)
    # <Response [200]>  表示请求成功了 响应对象
    print(response)

获取数据, 获取服务器返回响应数据 print(response.text)

解析数据, 提取我们想要 图集详情页url地址

推荐使用 parsel

  • 获取 response.text —> 返回html字符串数据内容
  • css选择器 根据标签属性内容, 提取数据

转换数据 转成可以解析对象 <Selector xpath=None data='<html>\r\n<head>\r\n <meta charset="ut...'>

    selector = parsel.Selector(response.text)

使用css选择器提取数据 .pics ul li .tits css语法定位标签/元素 getall 获取所有

    href = selector.css('.pics ul li .tits::attr(href)').getall()

for循环遍历 提取列表元素

    for index in href:

在这里插入图片描述

发送请求

对于图集详情页url地址 发送请求 5. 获取数据, 获取服务器返回响应数据

        index_data = requests.get(url=index_url, headers=headers).text

解析数据

提取图片url地址 以及标题

        index_selector = parsel.Selector(index_data)

提取图片链接

.talk_pic img 定位元素/标签 img<标签名>::attr(src) 提取属性 src <属性名>

        img_url_list = index_selector.css('.talk_pic img::attr(src)').getall()

图片标题

        title = index_selector.css('.border_bottom::text').get()

替换特殊字符

        new_title = title = re.sub(r'[\/:*?"<>|]', '', title)

保存数据

有什么不懂的问题可以 点击这里

        num = 1
        # 自动创建文件夹
        file = f'img\\{
      
      new_title}\\'
        # 如果没有这个文件夹
        if not os.path.exists(file):
            # 自动创建文件夹
            os.makedirs(file)
        # for循环遍历 提取列表元素
        for img_url in img_url_list:
            # 获取图片二进制数据
            img_content = requests.get(url=img_url, headers=headers).content
            # 保存图片
            with open(file + new_title + str(num) + '.jpg', mode='wb') as f:
                # 写入数据
                f.write(img_content)
                # 每次循环 +1
                num += 1
            print(title, img_url)

效果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/aliYz/article/details/127031148