网上爬取百度图片的五花八门,要么有的过时的,有的则是爬取的是缩略图,不是原图等。
鉴于此在学习的过程中,记录此贴。在写本文的时候,代码是可用的。

前言

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=&copyright=&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抓取百度图片高清原图『原来如此简单』『最新记录贴』相关推荐

  1. python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片

    成果预览: 源代码: import requests import re url = 'https://image.baidu.com/search/index' headers = { 'User- ...

  2. python爬虫教程,带你抓取百度的高清摄影图片

    python爬虫教程,带你抓取百度的高清摄影图片 源码分享: ''' 在学习过程中有什么不懂得可以加我的 python学习交流扣扣qun,934109170 群里有不错的学习教程.开发工具与电子书籍. ...

  3. python批量读取图片并批量保存_Python爬虫:批量抓取花瓣网高清美图并保存

    原标题:Python爬虫:批量抓取花瓣网高清美图并保存 昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文 ...

  4. 通过Python3 爬虫抓取漫画图片

    通过Python3 爬虫抓取漫画图片 引言: 最近闲来无事所以想着学习下python3,看了好长时间的文档,于是用python3写了一个漫画抓取的程序,好了 废话不多说上码! 第一步: 准备环境 和类 ...

  5. python4k高清图片_第一次接触,尝试用python抓取国外4k高清图像数据,真方便

    计划了很久,终于还是利用在家的几个月时间,开始学习python编程. 作为一个学霸,我更愿意在实践中学习,实践出来的效果给我更多的信心和乐趣,于是,我花了大约一个月的时间,看了一本Python入门的相 ...

  6. java jsoup抓取百度图片保存到本地,并压缩到指定大小(可指定宽高或者流大小)

    代码如下: package cn.xyz.commons.utils; import java.awt.image.BufferedImage; import java.io.ByteArrayInp ...

  7. 小白请上车 | Python抓取花瓣网高清美图

    一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网-- 花瓣 ,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑 ...

  8. Python + PySpider 抓取百度图片搜索的图片

    说明 1.PySpider 是一个方便并且功能强大的Python爬虫框架 2.PySpider 依赖于PhantomJS 3.windows平台,PySpider 与64位的Python兼容不太好,需 ...

  9. Python抓取花瓣网高清美图

    一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网--花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中. ...

最新文章

  1. LeetCode简单题之找出数组排序后的目标下标
  2. 轻松记账工程冲刺第二阶段10
  3. 【我的Android进阶之旅】推荐一款能提升数十倍效率的Android应用开发助手
  4. HTTPDNS成为移动互联网的标配–原因与原理解析(转)
  5. java string blog_StringUtils方法全集
  6. Ubuntu16.04LTS安装ROS Kinetic
  7. XP 远程连接window 2008 网络级别身份验证问题解决方法
  8. 一个简单的轮播图代码
  9. MATLAB-数组的使用
  10. 【电脑讲解】电脑常用快捷键,10个常用快捷键提高电脑工作效率
  11. eMule电驴使用从入门到精通
  12. Gauss消元法(特解与通解)
  13. Oracle中的日期时间函数
  14. python复制文件夹shutil.copytree
  15. GUCCI、LV等奢侈品巨头如何布局元宇宙的,其他品牌应该跟上吗?
  16. 服务器与普通电脑之间的区别是什么?
  17. 通讯协议,网络通讯协议基本原理透析
  18. 移动游戏运营数据分析指标:用户获取,用户活跃,用户生命周期
  19. SpringSecurity OAuth2.0认证授权-part1
  20. 家用电器辐射测试结果 哪些家用电器辐射大(zz)

热门文章

  1. matlab音频信号处理实验报告,matlab音频信号处理实验报告.docx
  2. 程序员面试失败的几种原因,你中枪了吗?
  3. 使用idea 2019-2时maven加入依赖不起作用
  4. FFmpeg命令(五)、视频去掉水印
  5. SkiaSharp 自绘弹幕效果
  6. 一文弄懂什么是大数据中的OLAP
  7. html中垂直线,如何在HTML中创建一条垂直线
  8. 组播MAC和单播MAC地址区别
  9. Avalon 总线 时序 介绍
  10. JQuery实现数据录入表格以及删除与编辑功能