Python爬虫实现百度图片自动下载


Posted in Python onFebruary 04, 2018

制作爬虫的步骤

制作一个爬虫一般分以下几个步骤:

分析需求分析网页源代码,配合开发者工具编写正则表达式或者XPath表达式正式编写 python 爬虫代码 效果预览

运行效果如下:

Python爬虫实现百度图片自动下载

存放图片的文件夹:

Python爬虫实现百度图片自动下载

需求分析

我们的爬虫至少要实现两个功能:一是搜索图片,二是自动下载。

搜索图片:最容易想到的是爬百度图片的结果,我们就上百度图片看看:

Python爬虫实现百度图片自动下载

随便搜索几个关键字,可以看到已经搜索出来很多张图片:

Python爬虫实现百度图片自动下载

分析网页

我们点击右键,查看源代码:

Python爬虫实现百度图片自动下载

打开源代码之后,发现一堆源代码比较难找出我们想要的资源。

这个时候,就要用开发者工具!我们回到上一页面,调出开发者工具,我们需要用的是左上角那个东西:(鼠标跟随)。

Python爬虫实现百度图片自动下载

然后选择你想看源代码的地方,就可以发现,下面的代码区自动定位到了相应的位置。如下图:

Python爬虫实现百度图片自动下载

Python爬虫实现百度图片自动下载

我们复制这个地址,然后到刚才的一堆源代码里搜索一下,发现了它的位置,但是这里我们又疑惑了,这个图片有这么多地址,到底用哪个呢?我们可以看到有thumbURL,middleURL,hoverURL,objURL

Python爬虫实现百度图片自动下载

通过分析可以知道,前面两个是缩小的版本,hoverURL 是鼠标移动过后显示的版本,objURL 应该是我们需要的,可以分别打开这几个网址看看,发现 objURL 的那个最大最清晰。

找到了图片地址,接下来我们分析源代码。看看是不是所有的 objURL 都是图片。

Python爬虫实现百度图片自动下载

发现都是以.jpg格式结尾的图片。

编写正则表达式

pic_url = re.findall('"objURL":"(.*?)",',html,re.S)

编写爬虫代码

这里我们用了2个包,一个是正则,一个是 requests 包

#-*- coding:utf-8 -*-
import re
import requests

复制百度图片搜索的链接,传入 requests ,然后把正则表达式写好

Python爬虫实现百度图片自动下载

url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5%E5%A4%B4%E5%83%8F&ct=201326592&ic=0&lm=-1&width=&height=&v=index' html = requests.get(url).text pic_url = re.findall('"objURL":"(.*?)",',html,re.S)

因为有很多张图片,所以要循环,我们打印出结果来看看,然后用 requests 获取网址,由于有些图片可能存在网址打不开的情况,所以加了10秒超时控制。

pic_url = re.findall('"objURL":"(.*?)",',html,re.S) i = 1 for each in pic_url:   
print each   
try:     
pic= requests.get(each, timeout=10)   
except requests.exceptions.ConnectionError:     print('【错误】当前图片无法下载')     
continue

接着就是把图片保存下来,我们事先建立好一个 images 目录,把图片都放进去,命名的时候,以数字命名。

dir = '../images/' + keyword + '_' + str(i) + '.jpg'
    fp = open(dir, 'wb')
    fp.write(pic.content)
    fp.close()
    i += 1

完整的代码

# -*- coding:utf-8 -*-
import re
import requests


def dowmloadPic(html, keyword):
  pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
  i = 1
  print('找到关键词:' + keyword + '的图片,现在开始下载图片...')
  for each in pic_url:
    print('正在下载第' + str(i) + '张图片,图片地址:' + str(each))
    try:
      pic = requests.get(each, timeout=10)
    except requests.exceptions.ConnectionError:
      print('【错误】当前图片无法下载')
      continue

    dir = '../images/' + keyword + '_' + str(i) + '.jpg'
    fp = open(dir, 'wb')
    fp.write(pic.content)
    fp.close()
    i += 1


if __name__ == '__main__':
  word = input("Input key word: ")
  url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip'
  result = requests.get(url)
  dowmloadPic(result.text, word)

Python爬虫实现百度图片自动下载

Python爬虫实现百度图片自动下载

我们看到有的图片没显示出来,打开网址看,发现确实没了。

Python爬虫实现百度图片自动下载

因为百度有些图片它缓存到百度的服务器上,所以我们在百度上还能看见它,但它的实际链接已经失效了。

总结

enjoy 我们的第一个图片下载爬虫吧!当然它不仅能下载百度的图片,依葫芦画瓢,你现在应该能做很多事情了,比如爬取头像,爬淘宝展示图等等。

完整代码已经放到Githut上 https://github.com/nnngu/BaiduImageDownload

Python 相关文章推荐
python k-近邻算法实例分享
Jun 11 Python
python求解水仙花数的方法
May 11 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
Python发送form-data请求及拼接form-data内容的方法
Mar 05 Python
详解Python装饰器由浅入深
Dec 09 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
在Python中使用gRPC的方法示例
Aug 08 Python
python将list转为matrix的方法
Dec 12 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
Python语言进阶知识点总结
May 28 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
Python configparser模块应用过程解析
Aug 14 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 #Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 #Python
numpy.random.seed()的使用实例解析
Feb 03 #Python
Python网络爬虫中的同步与异步示例详解
Feb 03 #Python
Python模块文件结构代码详解
Feb 03 #Python
Python处理文本换行符实例代码
Feb 03 #Python
Python断言assert的用法代码解析
Feb 03 #Python
You might like
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
python Tornado框架的使用示例
2020/10/19 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
团结演讲稿范文
2014/05/23 职场文书
大学生党性分析材料
2014/12/19 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL