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爬取百度图片相关推荐

  1. [Python3] 爬取百度图片到本地

    前言 因为需要一些图片素材,又不想一个个手动下载,遂通过爬虫来解放双手.在百度图片中搜索"汉服美女",然后以浏览器地址栏上的地址作为初始 URL.通过对 URL 分析知道 URL ...

  2. python3 爬取百度图片

    深度学习中,从网上下载大量的图片数据,肯定是必须的.作为python爬虫小白,记录一下此过程. 一.分析网页结构 1.在百度图片中输入狗,得到如下所示的网址 http://image.baidu.co ...

  3. json返回的img图片被原样输出_爬取百度图片,并下载至本地

    爬取百度图片 一:本节目标 本次爬取的目标是百度图片,将图片下载到本地 二:准备工作 安装Scrapy.Python3 三:爬取思路 我们需要实现的是下载图片,所以需要获取图片的真实链接 四:爬取分析 ...

  4. 用python3爬取百度首页

    用python3读取百度首页 代码 爬取百度首页 import urllib.request import urlliburl="http://www.baidu.com/" ht ...

  5. Python 爬虫实例(1)—— 爬取百度图片

    爬取百度图片  在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNightimport json ...

  6. python爬取百度图片(用于深度学习中数据集的收集)

    6_python爬取百度图片(用于深度学习中数据集的收集)(6-20181225-) 参考: https://blog.csdn.net/guyuealian/article/details/7873 ...

  7. 如何使用python爬取百度图片_python实现爬取百度图片的方法示例

    本文实例讲述了python实现爬取百度图片的方法.分享给大家供大家参考,具体如下: import json import itertools import urllib import requests ...

  8. python爬去百度图片_python实现爬取百度图片的方法示例

    本文实例讲述了python实现爬取百度图片的方法.分享给大家供大家参考,具体如下: import json import itertools import urllib import requests ...

  9. 详细分析如何利用python批量爬取百度图片

    这篇文章主要写的是利用python网络爬虫批量来爬取百度图片并保存到文件夹中. 首先我们打开百度图片这个网页:https://image.baidu.com/ 我们现在随便搜一个类型的图片,比如小狗, ...

最新文章

  1. COMP 0137 Machine Vision
  2. 又要头秃?2020年七大AI编程语言大盘点
  3. 图像偏色检测算法,速度快,效果好,共享给大家。
  4. 关于对FLASH开发,starling、starling feathers、starling MVC框架的理解
  5. 英语总结系列(十四):换一种心情充满趣味的二月
  6. cairo在Gecko上实现的路线图
  7. ubuntu-18.10 允许 root登录图形界面
  8. spark稀疏向量与稠密向量
  9. Android对话框的使用总结
  10. 标准差 php,标准偏差怎么计算
  11. python英雄对战代码_Python爬虫获取op.gg英雄联盟英雄对位胜率代码
  12. 计算机大类专业分流问题,2019级计算机大类专业分流实施细则
  13. JAVA读取Excel行数问题
  14. PEER地震波数据转化成lsdyna求解器格式曲线关键字方法
  15. 关于汇编语言中cmp指令的小笔记
  16. 【笔记】实战mpvue2.0多端小程序框架——原生小程序 API 调用与多端小程序发布
  17. 微分方程的特征值解法:斯图姆-刘维尔方程
  18. hexo yilia 添加友言畅言评论支持
  19. 白宫举办开源安全峰会,众多科技巨头参加
  20. 什么是ICP,怎么办理

热门文章

  1. java同一个包中,类之间的的调用
  2. requests库入门09-OAUTH认证
  3. 重新学习Ubuntu -- 截图软件的选择和安装
  4. CYQ.Data 轻量数据层之路 自定义MDataTable绑定续章(七)
  5. 统计abacbacdadbc中的每个字母出现的次数,输出格式是:a(4)b(3)c(3)d(2)
  6. dotConnect for Oracle控件免费下载及使用方法
  7. centos 修改ip地址
  8. 【吼吼睡cocos2d学习笔记】第四章 - 第一个游戏
  9. 解决wordpress无法离线发布(远程发布)的故障
  10. Technical Tcode List