Python3.8抓取百度图片高清原图『原来如此简单』『最新记录贴』
网上爬取百度图片的五花八门,要么有的过时的,有的则是爬取的是缩略图,不是原图等。
鉴于此在学习的过程中,记录此贴。在写本文的时候,代码是可用的。
前言
1.首先要有第一个明白的地方是百度图片目前是动态页面,无法正常使用爬取元素标签的方式去抓取图片。
2.使用requests请求百度图片时,返回的响应体里原图的链接是加密的。(所以直接能取到或者看到的都是非原图)
3.我也只是个小白,学习的过程看到网上文章比较乱,所以特地记录此贴。有什么任何错误,欢迎指教,但别开喷,谢谢。
工具包
脚本使用的工具包有:
import json
import re
import time
from concurrent.futures.thread import ThreadPoolExecutor
import requests
其中requests 可以使用 pip install requests 安装,我使用的版本是 2.23.0。
代码
本来是打算一步一步讲解,但是太浪费时间了。所以我选择注解代码的方式。希望大家能看得懂
# 储存所抓取到的原图链接
img_list = []# 线程池,最大个数为150
pool = ThreadPoolExecutor(max_workers=int(150))# 请求头
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36'' (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'}# 百度图片请求链接
base_url = r"https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&" \r"fp=result&queryWord={keyword}&cl=2&lm=-1&ie=utf-8&oe=utf-8&" \r"adpicid=&st=&z=&ic=&hd=&latest=©right=&word={keyword}&s=&" \r"se=&tab=&width=&height=&face=&istype=&qc=&nc=&fr=&expermode=&force=&pn={index}&rn=30&gsm=1e"# 解密百度原图地址函数,来自网上,非常感谢。
def decode_url(url):"""对百度加密后的地址进行解码:param url:百度加密的url:return:解码后的url"""if not url:return Nonetable = {'w': "a", 'k': "b", 'v': "c", '1': "d", 'j': "e", 'u': "f", '2': "g", 'i': "h",'t': "i", '3': "j", 'h': "k", 's': "l", '4': "m", 'g': "n", '5': "o", 'r': "p",'q': "q", '6': "r", 'f': "s", 'p': "t", '7': "u", 'e': "v", 'o': "w", '8': "1",'d': "2", 'n': "3", '9': "4", 'c': "5", 'm': "6", '0': "7",'b': "8", 'l': "9", 'a': "0", '_z2C$q': ":", "_z&e3B": ".", 'AzdH3F': "/"}url = re.sub(r'(?P<value>_z2C\$q|_z\&e3B|AzdH3F+)', lambda matched: table.get(matched.group('value')), url)return re.sub(r'(?P<value>[0-9a-w])', lambda matched: table.get(matched.group('value')), url)# 获取百度图片的函数
def get_img(get_index):global img_list# 构造一个完整的请求链接get_url = base_url.format(keyword=search_key, index=get_index)# 获得响应数据get_response = requests.get(get_url, headers=headers).text# 由于获得的响应数据是json类型,所以直接json格式化json_data = json.loads(get_response, strict=False)# 列表推导式,推导得到解密后的原图地址url_list = [decode_url(data.get('objURL')) for data in json_data.get('data')]# 这一步是删了列表里最后一个元素,原因是因为百度返回的每一条数据里永远会多一个空的数据,所以将他删除if len(url_list) >= 1:del url_list[len(url_list) - 1]# 将这个原图网址的列表 放到img_list里 img_list += url_listprint("当前图片数量: %d" % len(img_list))print("总用时:%s" % (time.time() - start))search_key = input("请输入想搜索照片的关键词:")# 构造一个完整的请求链接
full_url = base_url.format(keyword=search_key, index=0)# 获得响应数据
response = requests.get(full_url, headers=headers).text# 由于获得的响应数据是json类型,所以直接json格式化
json_list = json.loads(response, strict=False)# list_num是百度返回数据里告诉我们搜索图片的总量
list_num = int(json_list.get('listNum'))# 计时
start = time.time()# 通过对list_num处理,来决定需要请求多少次,每次的图片数量是30.之所以是30是因为百度网页每次请求时默认是30条数据,所以我采用了默认值。
for index in range(0, list_num, 30):# 开启一个线程处理请求和数据t = pool.submit(get_img, index)
文章里我只输出了【图片总量】和【总用时】,所有原图链接储存在img_list里,如果需要看到连接,可以直接输出,或者写到文件里,这里我就不写了。
成果
展示我自己输出的结果
1695张图片,用时不到1秒,还可以了。
Python3.8抓取百度图片高清原图『原来如此简单』『最新记录贴』相关推荐
- python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片
成果预览: 源代码: import requests import re url = 'https://image.baidu.com/search/index' headers = { 'User- ...
- python爬虫教程,带你抓取百度的高清摄影图片
python爬虫教程,带你抓取百度的高清摄影图片 源码分享: ''' 在学习过程中有什么不懂得可以加我的 python学习交流扣扣qun,934109170 群里有不错的学习教程.开发工具与电子书籍. ...
- python批量读取图片并批量保存_Python爬虫:批量抓取花瓣网高清美图并保存
原标题:Python爬虫:批量抓取花瓣网高清美图并保存 昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文 ...
- 通过Python3 爬虫抓取漫画图片
通过Python3 爬虫抓取漫画图片 引言: 最近闲来无事所以想着学习下python3,看了好长时间的文档,于是用python3写了一个漫画抓取的程序,好了 废话不多说上码! 第一步: 准备环境 和类 ...
- python4k高清图片_第一次接触,尝试用python抓取国外4k高清图像数据,真方便
计划了很久,终于还是利用在家的几个月时间,开始学习python编程. 作为一个学霸,我更愿意在实践中学习,实践出来的效果给我更多的信心和乐趣,于是,我花了大约一个月的时间,看了一本Python入门的相 ...
- java jsoup抓取百度图片保存到本地,并压缩到指定大小(可指定宽高或者流大小)
代码如下: package cn.xyz.commons.utils; import java.awt.image.BufferedImage; import java.io.ByteArrayInp ...
- 小白请上车 | Python抓取花瓣网高清美图
一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网-- 花瓣 ,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑 ...
- Python + PySpider 抓取百度图片搜索的图片
说明 1.PySpider 是一个方便并且功能强大的Python爬虫框架 2.PySpider 依赖于PhantomJS 3.windows平台,PySpider 与64位的Python兼容不太好,需 ...
- Python抓取花瓣网高清美图
一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中. ...
最新文章
- LeetCode简单题之找出数组排序后的目标下标
- 轻松记账工程冲刺第二阶段10
- 【我的Android进阶之旅】推荐一款能提升数十倍效率的Android应用开发助手
- HTTPDNS成为移动互联网的标配–原因与原理解析(转)
- java string blog_StringUtils方法全集
- Ubuntu16.04LTS安装ROS Kinetic
- XP 远程连接window 2008 网络级别身份验证问题解决方法
- 一个简单的轮播图代码
- MATLAB-数组的使用
- 【电脑讲解】电脑常用快捷键,10个常用快捷键提高电脑工作效率
- eMule电驴使用从入门到精通
- Gauss消元法(特解与通解)
- Oracle中的日期时间函数
- python复制文件夹shutil.copytree
- GUCCI、LV等奢侈品巨头如何布局元宇宙的,其他品牌应该跟上吗?
- 服务器与普通电脑之间的区别是什么?
- 通讯协议,网络通讯协议基本原理透析
- 移动游戏运营数据分析指标:用户获取,用户活跃,用户生命周期
- SpringSecurity OAuth2.0认证授权-part1
- 家用电器辐射测试结果 哪些家用电器辐射大(zz)