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 相关文章推荐
使用requests库制作Python爬虫
Mar 25 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
Python通用函数实现数组计算的方法
Jun 13 Python
如何在Django项目中引入静态文件
Jul 26 Python
python return逻辑判断表达式实现解析
Dec 02 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
python装饰器的特性原理详解
Dec 25 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
通俗讲解python 装饰器
Sep 07 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
py中的目录与文件判别代码
2008/07/16 Python
python 判断自定义对象类型
2009/03/21 Python
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
Python3计算三角形的面积代码
2017/12/18 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
python实现感知器算法(批处理)
2019/01/18 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
python和js交互调用的方法
2020/06/23 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
平面设计自荐信
2013/10/07 职场文书
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js