python3爬取百度图片

python3爬取百度图片

最终目的:能通过输入关键字进行搜索,爬取相应的图片存储到本地或者数据库

首先打开百度图片的网站,搜索任意一个关键字,比如说:水果,得到如下的界面

 

分析:

1、百度图片搜索结果的页面源代码不包含需要提取的图片信息,需要借助Chrome调试工具(F12调出)分析请求的URL地址

2、图片显示页面没有翻页按钮,但是页面一直往下拉会生成新的图片,这是典型的AJAX数据

 

F12打开调试工具,刷新网页,点击选中Network选项卡中的XHR标签(这个标签加载的就是AJAX请求),此时只能看到一条loginfo开头的信息,字面上可以理解为和登录相关的内容,先不管它

 

把网页往下拖动,可以看到有新的信息加载出来

 

这些加载出来的都是以acjson开头的信息,点击之后查看Headers、Preview、Response标签,可以看出来这里面包含了我们需要的图片信息

 

 

对比一下这几条信息的headers中Request URL可以得出参数中有三个值在变化,一个psm,一个pn,还有一个14。。。开头的数字,经过测试可以发现,实际上pn的值是最关键的,它影响翻页,其他两个可有可无。(对比url建议用一些在线代码对比工具,要不然眼睛要瞎)

 

下面开始写代码:

一、请求网页,获取html文本(百度图片有防盗链,加个Referer)

复制代码

# 获取动态页面返回的文本
def get_page_html(page_url):headers = {'Referer': 'https://image.baidu.com/search/index?tn=baiduimage','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}try:r = requests.get(page_url, headers=headers)if r.status_code == 200:r.encoding = r.apparent_encodingreturn r.textelse:print('请求失败')except Exception as e:print(e)

复制代码

二、使用正则表达式提取真实图片的地址(选的是小图,大图在objURL里,需要经过简单的解密)

# 从文本中提取出真实图片地址
def parse_result(text):url_real = re.findall('"thumbURL":"(.*?)",', text)return url_real

三、请求图片的url,返回content(图片信息需要以二进制写入)

复制代码

# 获取图片的content
def get_image_content(url_real):headers = {'Referer': url_real,'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}try:r = requests.get(url_real, headers=headers)if r.status_code == 200:r.encoding = r.apparent_encodingreturn r.contentelse:print('请求失败')except Exception as e:print(e)

复制代码

四、保存图片(因为是测试,我写的是绝对地址,正常需要用相对地址)

复制代码

# 将图片的content写入文件
def save_pic(url_real, content):root = 'D://baiduimage//'path = root + url_real.split('/')[-1]if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):with open(path, 'wb') as f:f.write(content)print('图片{}保存成功,地址在{}'.format(url_real, path))else:pass

复制代码

五、定义一个主函数(百度图片每次最多请求30张,即使改了其他请求参数也最多60张)

复制代码

# 主函数
def main():keyword = input('请输入你要查询的关键字: ')'''按照标准, URL 只允许一部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的。所以 URL 中使用其他字符就需要进行 URL 编码。python3中使用urllib.parse.quote进行编码'''keyword_quote = urllib.parse.quote(keyword)depth = int(input("请输入要爬取的页数(每页30张图): "))for i in range(depth):url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord+=&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&word={}&z=&ic=0&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&step_word={}&pn={}&rn=30&gsm=1e&1541136876386='.format(keyword_quote, keyword_quote, i * 30)html = get_page_html(url)real_urls = parse_result(html)for real_url in real_urls:content = get_image_content(real_url)save_pic(real_url, content)

复制代码

六、最后写一个函数入口

# 函数入口
if __name__ == '__main__':main()

 

当然,实现整个过程最好是先把整体的框架写好,那样思路最清晰。

关于百度图片的爬取就到这里,源代码地址:传送门

更多资讯或疑问内容请关注 微信公众号 “让梦飞起来” 或添加小编微信, 后台回复 “Python” ,领取更多资料哦

           ​                    

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql导入工具 行提交_使用命令行工具mysqlimport导入数据

Usage: mysqlimport [OPTIONS] database textfile …mysqlimport 程序是一个将以特定格式存放的文本数据(如通过“select * into OUTFILE from …”所生成的数据文件)导入到指定的MySQL Server 中的工具程序,比如将一个标准的csv 文件导入到某指定数据库的指定表中。…

Windows Phone 7 LongListSelector控件实现分类列表和字母索引

在wp7手机里面的联系人列表和程序里面里面我们可以看到一个根据字母索引来定位联系人或者应用程序的控件,那么这个控件就是LongListSelector控件了。 LongListSelector是一种比ListBox更加强大的列表控件,你可以根据你列表的信息来分类排列,根…

c# 获取电脑硬件信息通用查询类[测试通过]

C#获取电脑硬件信息通用类[Computer]代码展示和分析,简介如下: 1.项目中添加System.Management引用。 2.添加类Computer,把下面代码全选,复制,粘贴。 3.使用方法new Computer().GetComputerName()。 代码 usingSyst…

基于ssm北关村基本办公管理系统的设计与实现论文

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对北关村基本办公信息管理的提升&…

C# 操作线程的通用类[测试通过]

进程管理就是对服务器性能的管理和协调,在程序的运行角度来看非常重要,也可以根据操作进程的手段,衍生很多实用和智能的功能,以下就是介绍一个自己写的进程通用操作类,功能如下: 1.把ProcessUtility类直接…

官网安装Nvidia CUDA Toolkit、cuDNN报错502的备用镜像下载网址

国内从NVIDIA官网下载GPU驱动、CUDA Toolkit、cuDNN通常比较慢,下面提供了这些软件包的内网链接会极大加快下载速度。 一、软件包内网链接地址 CUDA 是英伟达显卡进行各种高性能运算必备的库,不同软件包依赖的 CUDA 版本可能不同,你需要根据…

python导入mysqldb_Python导入MySQLdb报错

摘要> flask开发相关功能,在本地测试没有问题,但是放到线上环境却报错 ImportError: libmysqlclient.so.16: cannot open shared object file: No such file or directory> 检查了下发现在 /usr/lib64/mysql 下面存在libmysqlclient.so.18文件(uan…

宽字符编码和解码通用类[CodeWidthChartUtility]

在做jsonp传递的时候遇到一个问题,当有特殊字符或中文的时候就会导致数据错误或者是乱码,刚开始有js的编码和解码和正则,都比较麻烦,现在找到了一种合适的解决方案,宽字符编码,js端会自动解析,能…

Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)

目录 1.cuda的安装 1.1 最简单的方法——分开安装驱动和cuda 1.2 更万能的方法——同时安装驱动和cuda 1.3 终极杀手锏 2.cudnn的安装 安装之前首先要确认你需要安装的cuda和cudnn的版本,假如你后续还需要安装tensorflow的话,请看我的另外一篇博客&am…

python做ui自动化_python+selenium做ui自动化测试用法必会

一、前言大家都知道,基于Web端的测试的基础框架是需要Selenium做主要支撑的,这里边给大家介绍下Web测试核心之基于 Python 的 SeleniumSelenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用…

c# 操作IIS应用程序池

直接代码: 代码 usingSystem.DirectoryServices; //添加引用 System.DirectoryServicestry{ DirectoryEntry appPool newDirectoryEntry("IIS://localhost/W3SVC/AppPools"); DirectoryEntry findPool appPool.Children.Find("DefaultAppPool&…

Android获取手机和系统版本等信息的代码

2019独角兽企业重金招聘Python工程师标准>>> String phoneInfo "Product: " android.os.Build.PRODUCT; phoneInfo ", CPU_ABI: " android.os.Build.CPU_ABI; phoneInfo ", TAGS: " android.os.Build.TAGS; phoneInfo &…

用hyperledger cello H3C分支创建单机模式区块链系统

本文介绍用hyperledger cello的0.9.0-h3c分支创建一套区块链系统的完整流程,希望对读者有所帮助。 环境准备工作:需要准备一台装有ubuntu 16.04的主机,内存需要大一些,建议8G以上。安装docker-ce和docker-compose。 接下来&…

mysql 导入导出脚本_MySQL导入和导出sql脚本

MySQL导入和导出sql脚本首先,使用mysqldump命令的前提是,在Cmd中进入mysql安装目录下的bin目录下,才可以使用该命令。我的mysql安装在E:盘,所以,首先进入bin目录下:E:\Program Files\MySQL\MySQ…

Visual Studio 2010快捷键大全

为什么80%的码农都做不了架构师?>>> 【窗口快捷键】 CtrlW,W: 浏览器窗口 CtrlW,S: 解决方案管理器 CtrlW,C: 类视图 CtrlW,E: 错误列表 CtrlW,O: 输出视图 trlW,P: 属性窗口 CtrlW,T: 任务列表 CtrlW,X: 工具箱 CtrlW,B: 书签窗口 CtrlW,U: 文档大纲 C…

c# 查询本机日志

代码 StringBuilder sb newStringBuilder();EventLog mylog newEventLog();mylog.Log "Application"; //System[系统日志] | Application[应用日志] | Security[安全日志]EventLogEntryCollection myCollection mylog.Entries;for(inti 0; i <myCollection.Count…

Python安装FrankMocap实现3D人体姿态估计

FrankMocap 是港中文联合 Facebook AI 研究院提出的3D 人体姿态和形状估计算法。 不仅仅是估计人体的运动姿态&#xff0c;甚至连身体的形状&#xff0c;手部的动作都可以一起计算出来。 算法很强大&#xff0c;能够从单目视频同时估计出 3D 人体和手部运动&#xff0c;在一块 …

079冒险岛mysql解封账号_冒险岛079MAX稀有整合2020年度版,亲测一键端10人限制端...

该版本为整合版&#xff0c;附带相关工具&#xff0c;可自行使用。以下为启动游戏的步骤。1、打开mysql文件夹里的"启动数据库"&#xff0c;启动后如果弹出提示请点确定&#xff0c;按启动按钮&#xff0c;等待mysql亮绿灯即可。2、打开079MAX服务端文件夹中的“启动…

Windows任务管理 连接用户登录信息 通用类[C#版]

通用类名[ComputerLoginUserInfo.cs] 代码如下&#xff1a; 代码 usingSystem;//---引用usingSystem.Runtime.InteropServices;usingSystem.Text;///<summary>///Windows 任务管理器登录用户信息///author:Stone_W///date:2011.1.14///</summary>publicclassComput…

Hanoi(汉诺)塔问题

问题描述&#xff1a; Hanoi(汉诺)塔问题。古代有一个梵塔&#xff0c;塔内有3个座A,B,C&#xff0c;开始时A座有n个盘子&#xff0c;盘子大小不等&#xff0c;大的在下&#xff0c;小的在上。有一个老和尚想把这n个盘子&#xff0c;从A座移动到C座&#xff0c;但是每次只允许移…