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 ...
随机推荐
- C++ 地球人口承载力
题目描述 假设地球上的新生资源按恒定速度增长.照此测算,地球上现有资源加上新生资源可供 xx 亿人生活 aa 年,或供 yy 亿人生活 bb 年. 为了能够实现可持续发展,避免资源枯竭,地球最多能够养 ...
- .NET遍历二维数组-先行/先列哪个更快?
上周在.NET性能优化群里面有一个很有意思的讨论,讨论的问题如下所示: 请教大佬:2D数组,用C#先遍历行再遍历列,或者先遍历列再遍历行,两种方式在性能上有区别吗? 据我所知,Julia或者pytho ...
- IDEA启动报错 NoClassDefFound
很仔细的看了项目,发现jar包都齐全,没有问题,找了几天,都没有发现什么问题. 最后,想到可能是启动配置的问题,内存的问题 加了上面的配置-Xss2058k,设定程序启动时占用内存大小,正常启动
- JAVA虚拟机16-方法的动态调用
更详细:https://www.cnblogs.com/jthr/p/15762527.html 1.子类重写父类方法 1.1父类 public class Father { public int n ...
- .NET 支付宝SDK新版 AlipayEasySDK 配置文件详细说明
config代码: using Tea; namespace Alipay.EasySDK.Kernel { /// <summary> /// 客户端配置参数模型 /// </su ...
- ChatGPT国内镜像模板,国内使用ChatGPT中文版本
@ 目录 一.什么是ChatGPT国内镜像 二.ChatGPT国内镜像使用教程 免费ChatGPT镜像的功能: 三.ChatGPT中文版作用 四.怎么使用ChatGPT国内镜像 五.中文ChatGPT ...
- centos7中配置vnc服务多用户
我用的本地yum源. 注意: 在配置root用户时,设置vnc密码.vncpasswd 添加普通用户时,要先在root用户下添加普通用户(如:vnc1,vnc2) useradd vnc1 passw ...
- metasploit2-practice
Metasploittable2打靶教程 本次靶机练习主要熟悉:高危端口利用:metasploit中search,show及各个模块使用. 一.环境准备 1.把靶场放在vmware打开,启用nat模式 ...
- 读论文SRCNN:Learning a Deep Convolutional Network for Image Super-Resolution
Learning a Deep Convolutional Network for Image Super-Resolution SRCNN是深度学习应用于SR领域的开山之作. 论文 2014 ECC ...
- 基于C++的OpenGL 05 之坐标系统
1. 引言 本文基于C++语言,描述OpenGL的坐标系统 前置知识可参考: 基于C++的OpenGL 04 之变换 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...