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 相关文章推荐
pycharm 使用心得(五)断点调试
Jun 06 Python
浅析Python中的join()方法的使用
May 19 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python实现文件的备份流程详解
Jun 18 Python
对Python函数设计规范详解
Jul 19 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
Python实现自动整理文件的脚本
Dec 17 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
May 31 Python
聊聊Python String型列表求最值的问题
Jan 18 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中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
Django的session中对于用户验证的支持
2015/07/23 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
2014年公司庆元旦活动方案
2014/03/05 职场文书
通用自荐信范文
2014/03/14 职场文书
酒店管理求职信范文
2014/04/06 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
护士求职自荐信
2015/03/25 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
python面向对象版学生信息管理系统
2021/06/24 Python