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” ,领取更多资料哦
python3爬取百度图片相关推荐
- [Python3] 爬取百度图片到本地
前言 因为需要一些图片素材,又不想一个个手动下载,遂通过爬虫来解放双手.在百度图片中搜索"汉服美女",然后以浏览器地址栏上的地址作为初始 URL.通过对 URL 分析知道 URL ...
- python3 爬取百度图片
深度学习中,从网上下载大量的图片数据,肯定是必须的.作为python爬虫小白,记录一下此过程. 一.分析网页结构 1.在百度图片中输入狗,得到如下所示的网址 http://image.baidu.co ...
- json返回的img图片被原样输出_爬取百度图片,并下载至本地
爬取百度图片 一:本节目标 本次爬取的目标是百度图片,将图片下载到本地 二:准备工作 安装Scrapy.Python3 三:爬取思路 我们需要实现的是下载图片,所以需要获取图片的真实链接 四:爬取分析 ...
- 用python3爬取百度首页
用python3读取百度首页 代码 爬取百度首页 import urllib.request import urlliburl="http://www.baidu.com/" ht ...
- Python 爬虫实例(1)—— 爬取百度图片
爬取百度图片 在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNightimport json ...
- python爬取百度图片(用于深度学习中数据集的收集)
6_python爬取百度图片(用于深度学习中数据集的收集)(6-20181225-) 参考: https://blog.csdn.net/guyuealian/article/details/7873 ...
- 如何使用python爬取百度图片_python实现爬取百度图片的方法示例
本文实例讲述了python实现爬取百度图片的方法.分享给大家供大家参考,具体如下: import json import itertools import urllib import requests ...
- python爬去百度图片_python实现爬取百度图片的方法示例
本文实例讲述了python实现爬取百度图片的方法.分享给大家供大家参考,具体如下: import json import itertools import urllib import requests ...
- 详细分析如何利用python批量爬取百度图片
这篇文章主要写的是利用python网络爬虫批量来爬取百度图片并保存到文件夹中. 首先我们打开百度图片这个网页:https://image.baidu.com/ 我们现在随便搜一个类型的图片,比如小狗, ...
最新文章
- COMP 0137 Machine Vision
- 又要头秃?2020年七大AI编程语言大盘点
- 图像偏色检测算法,速度快,效果好,共享给大家。
- 关于对FLASH开发,starling、starling feathers、starling MVC框架的理解
- 英语总结系列(十四):换一种心情充满趣味的二月
- cairo在Gecko上实现的路线图
- ubuntu-18.10 允许 root登录图形界面
- spark稀疏向量与稠密向量
- Android对话框的使用总结
- 标准差 php,标准偏差怎么计算
- python英雄对战代码_Python爬虫获取op.gg英雄联盟英雄对位胜率代码
- 计算机大类专业分流问题,2019级计算机大类专业分流实施细则
- JAVA读取Excel行数问题
- PEER地震波数据转化成lsdyna求解器格式曲线关键字方法
- 关于汇编语言中cmp指令的小笔记
- 【笔记】实战mpvue2.0多端小程序框架——原生小程序 API 调用与多端小程序发布
- 微分方程的特征值解法:斯图姆-刘维尔方程
- hexo yilia 添加友言畅言评论支持
- 白宫举办开源安全峰会,众多科技巨头参加
- 什么是ICP,怎么办理
热门文章
- java同一个包中,类之间的的调用
- requests库入门09-OAUTH认证
- 重新学习Ubuntu -- 截图软件的选择和安装
- CYQ.Data 轻量数据层之路 自定义MDataTable绑定续章(七)
- 统计abacbacdadbc中的每个字母出现的次数,输出格式是:a(4)b(3)c(3)d(2)
- dotConnect for Oracle控件免费下载及使用方法
- centos 修改ip地址
- 【吼吼睡cocos2d学习笔记】第四章 - 第一个游戏
- 解决wordpress无法离线发布(远程发布)的故障
- Technical Tcode List