requests库获取指定关键词的图片,并保存到本地
var code = “45f4267f-9476-44ca-ac68-6d32aad2d4e1”
源码地址:https://gitee.com/myrensheng/data_analysis
import os
import string
import requests
# 百度图片搜索地址
url = "https://image.baidu.com/search/acjson"
# 构造请求头数据
header = {
'Accept': 'text/plain, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'image.baidu.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
# 构造请求参数
param = {
'tn': 'resultjson_com',
'ipn': 'rj',
'ct': '201326592',
'fp': 'result',
'queryWord': '',
'cl': '2',
'lm': '-1',
'ie': 'utf-8',
'oe': 'utf-8',
'st': '-1',
'ic': '0',
'word': '',
'face': '0',
'istype': '2',
'nc': '1',
'pn': '60',
'rn': '30',
'gsm': '1e',
}
def get_json(query_word=None, page_num=None):
"""
根据查询的关键词及查询的页面返回 json 数据
:param query_word: 输入的关键词
:param page_num: 查询的页面数
:return: 对应的 json 数据
"""
# 参数列表中添加 queryWord 关键词
param["queryWord"] = query_word
param["word"] = query_word
# 参数列表中添加 pn 关键词
param["pn"] = f'{30 * page_num}'
# 请求百度图片网站,将返回的 json 数据转换为 dict 数据
res = requests.get(url=url, headers=header, params=param)
res_dict = dict(res.json())
return res_dict
def save_picture(query_word=None, pic_name=None, pic_url=None):
"""
将图片保存在以 query_word 为名创建新的文件夹
:param query_word:输入的关键词
:param pic_name: json 中解析出来的图片名称
:param pic_url: json 中解析出来的图片地址
:return: None
"""
# 获取当前 py 文件所在的绝对地址
cwd = os.getcwd()
# 拼接 images 文件夹地址
images_path = os.path.join(cwd, "images")
query_word_path = os.path.join(images_path, query_word)
# 如果没有 images 文件夹,就新建一个
if "images" not in os.listdir(cwd):
os.mkdir(images_path)
# 在 images 文件夹下,新建以 query_word 为名的文件夹
if query_word not in os.listdir(images_path):
os.mkdir(query_word_path)
# 根据 pic_url 读取图片
pic = requests.get(pic_url, stream=True)
# 构造图片地址
pic_path = os.path.join(query_word_path, pic_name)
# 保存图片
with open(pic_path, "wb") as f:
for c in pic.iter_content(chunk_size=10240):
f.write(c)
def get_pic_info(res=None):
"""
解析 get_json 函数返回的 json 数据
:param res: get_json 函数返回的 json 数据
:return: 重新构造的图片数据,包含图片名称,图片地址
"""
# 多张图片的信息列表
pic_info = []
# 图片数据存放在 data 中
for data in res["data"]:
# 获取图片名称
pic_name = data.get("fromPageTitleEnc", None)
# 获取图片地址
pic_url = data.get("hoverURL", None)
# 判断图片名称和图片地址是否存在
if pic_name and pic_url:
# 替换图片名称中的特殊字符
pic_name = pic_name.replace(" ", '')
for p in string.punctuation:
pic_name = pic_name.replace(p, '')
# 用图片名称命名图片
if "png" in pic_url:
pic_name += ".png"
if "jpg" in pic_url:
pic_name += ".jpg"
if "gif" in pic_url:
pic_name += ".gif"
if "jpeg" in pic_url:
pic_name += ".jpeg"
if "bmp" in pic_url:
pic_name += ".bmp"
else:
pic_name += ".jpg"
pic_info.append({"pic_name": pic_name, "pic_url": pic_url})
return pic_info
def main():
# 程序运行的主函数
while True:
# 多次下载,直到输入 q 退出
query_word = str(input("输入要下载的图片名(q退出):"))
if query_word == "q":
break
while True:
# 当输入的数量不为整数,循环输入
pic_num = input("输入需要下载的页数(q退出):")
if pic_num == "q":
break
try:
pic_num = int(pic_num)
except:
continue
# 下载量不超过 30 就下载第一页图片
page_num = 1 if int(pic_num / 30) == 0 else int(pic_num / 30)
for i in range(1, page_num + 1):
# 获取 json 数据
res = get_json(query_word=query_word, page_num=i)
# 获取图片名和图片地址
pic_info = get_pic_info(res=res)
# 保存图片
for pic in pic_info:
print(pic["pic_name"], "下载完成")
save_picture(query_word=query_word, pic_name=pic["pic_name"], pic_url=pic["pic_url"])
break
if __name__ == '__main__':
main()
requests库获取指定关键词的图片,并保存到本地的更多相关文章
- c# 应用NPOI 获取Excel中的图片,保存至本地的算法
要求:读取excel中的图片,保存到指定路径 思路: 利用NPOI中 GetAllPictures()方法获取图片信息 步骤: 1.新建一个Windows窗体应用程序 2.桌面新建一个excel,贴 ...
- php获取网页中图片并保存到本地的代码
php获取网页中图片并保存到本地的代码,将网页中图片保存本地文件夹: <?php /** * 获取网页中图片,并保存至本地 * by www.jbxue.com */ header(" ...
- php获取网页中图片并保存到本地
php获取网页中图片并保存到本地的代码,将网页中图片保存本地文件夹: save_img("http://www.jbxue.com" ?>
- python爬取某个网站的图片并保存到本地
python爬取某个网站的图片并保存到本地 #coding:utf- import urllib import re import sys reload(sys) sys.setdefaultenco ...
- 微信小程序生成分享图片,保存到本地
1.页面 <canvas canvas-id="shareCanvas" style="width:600px;height:900px">< ...
- Python:爬取网站图片并保存至本地
Python:爬取网页图片并保存至本地 python3爬取网页中的图片到本地的过程如下: 1.爬取网页 2.获取图片地址 3.爬取图片内容并保存到本地 实例:爬取百度贴吧首页图片. 代码如下: imp ...
- 下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片 将图片的二进制字节字符串在HTML页面以图片形式输出 asp.net 文件 操作方法
下载远程(第三方服务器)文件.图片,保存到本地(服务器)的方法.保存抓取远程文件.图片 将一台服务器的文件.图片,保存(下载)到另外一台服务器进行保存的方法: 1 #region 图片下载 2 3 ...
- 使用URLConnection下载文件或图片并保存到本地
有时候需要从网络上面下载图片到本地进行保存,代码如下: package com.jointsky.jointframe.test; import java.io.FileOutputStream; i ...
- 吴裕雄--天生自然python学习笔记:编写网络爬虫代码获取指定网站的图片
我们经常会在网上搜索井下载图片,然而一张一张地下载就太麻烦了,本案例 就是通过网络爬虫技术, 一次性下载该网站所有的图片并保存 . 网站图片下载并保存 将指定网站的 .jpg 和 .png 格式的图片 ...
- php将远程图片下载保存到本地
/* *功能:php完美实现下载远程图片保存到本地 *参数:文件url,保存文件目录,保存文件名称,使用的下载方式 *当保存文件名称为空时则使用远程文件原来的名称 */ function getIma ...
随机推荐
- 重定向Kubernetes pod中的tcpdump输出
重定向Kubernetes pod中的tcpdump输出 最新发现一个比较有意思的库ksniff,它是一个kubectl 插件,使用tcpdump来远程捕获Kubernetes集群中的pod流量并保存 ...
- 接入jira OAuth权限流程
如果要在自己的系统中操作jira的api完成这些单据的创建.审批等操作,就不得不要先完成jira的第三方授权,才能在第三方系统去做这些jira的操作. 首先必须在jira系统配置客户端的相关信息,须配 ...
- Educational Codeforces Round 143 (Rated for Div. 2) A-E
比赛链接 A 题意 有两座塔由红蓝方块组成,分别有 \(n,m\) 个方块,一次操作可以把一座塔塔顶的方块移动到另一座塔的塔顶,问通过操作是否能使每座塔中没有颜色相同的相邻方块. 题解 知识点:贪心. ...
- SpringBoot整合Mybatis、SpringBoot整合Spring Data JPA
Springboot Mybatis <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- STL中的智能指针(Smart Pointer)及其源码剖析: std::unique_ptr
STL中的智能指针(Smart Pointer)及其源码剖析: std::unique_ptr 和 std::auto_ptr一样,std::unique_ptr也是一种智能指针,它也是通过指针的方式 ...
- Training Spiking Neural Networks with Local Tandem Learning
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 36th Conference on Neural Information Processing Systems (NeurIPS 202 ...
- GIT初学者详细指令学习
参考网站:https://www.liaoxuefeng.com/wiki/896043488029600 基础概念 1.自定义名字和邮箱号 git config --global user.name ...
- KingbaseES R6集群物理copy方式手工添加新备库节点
案例说明:对于主库数据量比较大的环境,在添加新节点是可以采用在线clone方式创建新的备库节点,也可以在离线的状态下,直接拷贝其中一个备库的所有集群相关目录来创建新的备库节点.本案例介绍了通过离线物理 ...
- Django-drf-序列化器高级用法之SerializerMethodField
在Drf框架中的serializers.py序列化中, SerializerMethodField字段是一个只读字段.它通过调用附加到的序列化程序类上的方法来获取其值.它可用于将任何类型的数据添加到对 ...
- pip使用阿里云镜像
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip config set install.trust ...