python爬虫_requests获取小黄人表情保存到文件夹
  6DMaaPzJglxt 2023年12月05日 46 0



文章目录

  • ⭐前言
  • 💖 requests简介(发送请求)
  • 💖 urlretrieve简介(下载远程图片)
  • 💖 获取图片的接口保存到本地
  • 💖 加餐环节:前端vue3+antd展示图片
  • ⭐结束



python爬虫_requests获取小黄人表情保存到文件夹_python

⭐前言

大家好,我是yma16,本文分享python使用requests获取图片保存到文件夹。

站点资源来源:个人博客网站( http://yongma16.xyz/emoji_api/)
网站接口对用户开放

python爬虫_requests获取小黄人表情保存到文件夹_HTTP_02


实现效果:


python爬虫_requests获取小黄人表情保存到文件夹_爬虫_03

💖 requests简介(发送请求)

Requests是Python中的一个HTTP库,它允许你向任意网址发送HTTP请求,同时提供了简单易用的API,比Python自带的urllib模块更加方便使用。
Requests库使用简单,可以方便地进行HTTP请求的构造,可以实现GET、POST、PUT、DELETE等请求方法,同时支持HTTP/HTTPS协议,并且可以方便地处理HTTP响应。Requests库还提供了在HTTP请求过程中使用的各种验证方法,如Basic Auth、Digest Auth等,使得在不同的环境下进行网络请求更加方便。

💖 urlretrieve简介(下载远程图片)

urlretrieve 是 Python 中 urllib 库中的一个函数,用于从指定的 URL 下载数据并保存到本地文件中。该函数的语法如下:

urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

参数说明:

  • url:下载文件的 URL。
  • filename:可选参数,指定文件保存的位置,若未指定则会将文件保存为临时文件。
  • reporthook:可选参数,回调函数,用于显示下载进度。
  • data:可选参数,发送到 URL 的数据,一般是 POST 请求时使用。

该函数的返回值为一个二元素元组,第一个元素为已经下载好的文件在本地的保存路径(若未指定保存路径,则为临时文件路径),第二个元素是一个 HTTPMessage 实例,包含了 HTTP 响应消息的头部信息和其他相关属性。

💖 获取图片的接口保存到本地

get请求获取图片资源
接口

import requests,os
from  urllib import parse,request
def saveImg(name):
    try:
        page_url='http://yongma16.xyz/api/emoji/get/'+name
        resp = requests.get(page_url)
        json_url = resp.json()  # 返回json
        datas = json_url['data']
        for i in range(0,len(datas)):
            image_url=datas[i]
            img_name=name+str(i)
            dirpath = os.path.join('images',img_name)
            if not os.path.exists(dirpath):
                os.mkdir(dirpath)  # 创建目录
            request.urlretrieve(image_url,os.path.join(dirpath,'%d.jpg'%(i)))
            print('%s下载完成'%(image_url))                               
    except Exception as e:
        print(e)
if __name__=='__main__':
    saveImg('小黄人');

运行结果:

python爬虫_requests获取小黄人表情保存到文件夹_开发语言_04


inscode代码如下:



💖 加餐环节:前端vue3+antd展示图片

代码块分享:
前端vue3的布局代码分享

<template>
  <div class="emoji">
    <a-spin :spinning="spinning" :delay="delay" class="home-emoji-loading">
      <div class="emoji-img">
        <a-card :title="searchTitle ? '关键词:' + searchTitle : '欢迎搜索图片与表情包'" class="card-design-class">
          <template v-for="(item, index) in showEmoji.showImg" :key="index">
            <!-- <a-card-grid class="grid-img-class"> -->
            <a-image :src="item" class="card-img-image" />
            <!-- </a-card-grid> -->
          </template>
        </a-card>
      </div>
      <!-- 分页 -->
      <div class="emoji-page">
        <a-pagination
          v-model:current="pageData.crurentPage"
          :page-size="pageData.splitNum"
          @change="gotoCurrentPage(pageData.crurentPage, pageData.total)"
          :total="pageData.total"
          :show-total="(total) => `总共 ${total} 记录`"
        />
      </div>
    </a-spin>
  </div>
</template>

<script>
import { reactive, onMounted, toRefs, watch } from "vue";
export default {
  name: "Emoji",
  props: {
    spinning: Boolean,
    delay: Number,
    emojiData: Array,
    emojiTotal: Number,
    searchWords: String,
    searchTitle: String,
  },
  setup(props) {
    const { emojiData } = toRefs(props);
    const cardTitle = reactive({
      title: "搜索结果",
    });
    const pageData = reactive({
      crurentPage: 1,
      total: emojiData.value.length,
      splitNum: 15,
    });
    // 展示数据
    const showEmoji = reactive({
      showImg: [],
    });
    // 制作一个分页,一页有十张图片
    function pageSplit() {
      if (emojiData && emojiData !== []) {
        // 存在
        pageData.crurentPage = 1;
        showEmoji.showImg = [];
        pageData.total = props.emojiTotal;
        if (props.pageTotal <= pageData.splitNum) {
          // 开始分页
          showEmoji.showImg = emojiData;
        } else {
          for (let imgLoc = 0; imgLoc < pageData.splitNum; ++imgLoc) {
            showEmoji.showImg.push(props.emojiData[imgLoc]);
          }
        }
      }
    }

    onMounted(() => {
      // 分页
      pageSplit();
    });
    watch(
      () => {
        props.emojiData;
      },
      () => {
        console.log(props.searchTitle, "emoji组件渲染图片");
        pageSplit();
      },
      {
        immediate: false,
        deep: true,
      }
    );
    //点击分页跳转

    watch(
      () => {
        pageData;
      },
      () => {
        pageSplit();
        const page = (pageData.crurentPage = 1);
        const pageSize = (pageData.total = props.emojiTotal);
        gotoCurrentPage(page, pageSize);
      },
      {
        immediate: true,
        deep: true,
      }
    );

    function gotoCurrentPage(page, pageSize) {
      console.log("翻页", page);
      let length = pageSize;
      showEmoji.showImg = [];
      for (
        let imgLoc = pageData.splitNum * (page - 1);
        imgLoc < pageData.splitNum * page && imgLoc < length;
        ++imgLoc
      ) {
        //
        showEmoji.showImg.push(props.emojiData[imgLoc]);
      }
    }
    return {
      ...props,
      cardTitle,
      showEmoji,
      pageData,
      gotoCurrentPage,
    };
  },
};
</script>

<style scoped>
.emoji {
  position: relative;
  display: block;
  left: 50%;
  transform: translateX(-50%);
  width: 80%;
  overflow: hidden;
  box-sizing: border-box;
  box-shadow: 5px 5px 20px rgba(0, 0, 0, 0.18);
}
.card-design-class{
  background: rgba(255,255,255,.8);
}
.emoji-img {
  position: relative;
  width: 100%;
}
.emoji-page {
  margin-top: 5px;
  text-align: right;
}
.grid-img-class {
  width: 20%;
  height: 200px;
  text-align: center;
  overflow: auto;
  align-content: center;
  justify-items: center;
}

.grid-img-class::-webkit-scrollbar-track {
  border-radius: 2px;
  background: #b46868;
}

/* 滚动条的滑轨背景颜色 */

.grid-img-class::-webkit-scrollbar-thumb {
  height: 5px;
  border-radius: 2px;
  background: rgba(17, 227, 255, 0.2);
}

/* 滑块颜色 */

.grid-img-class::-webkit-scrollbar-button {
  border-radius: 2px;
  background: #ffa581;
}

/* 滑轨两头的监听按钮颜色 */

.grid-img-class::-webkit-scrollbar-corner {
  border-radius: 2px;
  background: rgb(81, 255, 226);
}

/* 横向滚动条和纵向滚动条相交处尖角的颜色 */
.card-img-image {
  position: relative;
  height: 110px;
}

@media only screen and (max-width: 600px) {
  .grid-img-class {
    width: 100%;
  }

  .emoji {
    overflow: auto;
  }

  .card-img-image {
    height: auto;
  }
}
</style>

效果如下:

python爬虫_requests获取小黄人表情保存到文件夹_python_05

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!

python爬虫_requests获取小黄人表情保存到文件夹_python爬虫_06

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 感谢你的阅读!


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月05日 0

暂无评论

推荐阅读
6DMaaPzJglxt