上一篇博客,实现了下载一张图片的简单爬虫。但是其代码,仅仅能下载一张图片。爬虫作为数据分析的第一步工作,需要爬取的是海量数据;假设我想下载一个网站几十张图片,那怎么实现呢?

首先,我们利用框图或者伪代码,理清一下思路。我想要下载多张图片,思路如下:

1、访问具有多张图片的网页;

2、写出下载图片的Python函数;

3、获取多张图片对应的多条html信息;

4、将多条图片对应的html导入到下载函数当中。即可。

第1、2、4都是上一篇blog中说明了的,直接沿袭即可。本文将介绍,如何同时获得多张图片对应的html。

对于目标网页,例如http://tieba.baidu.com/p/2708004726,目的是爬取海女 能年玲奈的图,本页面中一共33张。首先是F5+F12抓包,并对网页中的图片,查找其“审查元素”;一般会得到如下html的字符串:<img class="BDE_Image" src="http://imgsrc.baidu.com/forum/w%3D580/sign=ee888bf4b68f8c54e3d3c5270a282dee/062f162dd42a283475427b1159b5c9ea14cebfbe.jpg" pic_type="0" width="560" height="759" style="cursor: url(&quot;http://tb2.bdstatic.com/tb/static-pb/img/cur_zin.cur&quot;), pointer;">

可以发现,其实图片对应的代码,就是http://imgsrc.baidu.com/forum/w%3D580/sign=ee888bf4b68f8c54e3d3c5270a282dee/062f162dd42a283475427b1159b5c9ea14cebfbe.jpg这一串而已,将这串代码代入到下载函数里面,就可以下载对应的图片到本地。假设我要下载100张图片,那么就要获取100个这样的图片链接,执行100次下载函数即可。

那么,如何获取这100个图片链接,则是本文的核心难点。有三种方法:

1、使用第三方模块BeautifulSoup获取图片链接;

2、使用正则表达式,及re包;

3、使用lxml包的etree模块,将html代码转为xml,再用xpath提取图片链接。

本文使用方法1,因为BeautifulSoup最简单、易上手、效率高。源代码如下:

# -*- coding: utf-8 -*- import requests
import os
from bs4 import BeautifulSoup#导入BeautifulSoup模块#在本地新建一个文件夹,保存下载的图片
folder = 'test_img'
if not os.path.exists(folder):os.makedirs(folder)#爬取对象是百度贴吧,爬取本网页中,能年玲奈的33张图片
img_url = 'http://tieba.baidu.com/p/2708004726'
header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}#定义下载图片的函数
def download(url):response = requests.get(url, headers = header)name = url.split('/')[-1]f = open(folder + '/baidutieba/' + name + '.jpg', 'wb')f.write(response.content)f.close()return True#获取网页的response类、html
img_response = requests.get(img_url, headers = header)
img_html = img_response.text#获取网页的soup类;
img_soup = BeautifulSoup(img_html, 'html.parser')#本次实例的重点:bs4包中的find_all函数,变量是html的标签tag和属性attrs,依此两个量来定位src所在位置,返回的是bs4类
img = img_soup.find_all('img', attrs = {'class':'BDE_Image'})#循环函数,用bs4的get函数,直接获取src的属性值,即是图片对应的网址
for img_src in img:img_src = img_src.get('src')print(img_src)download(img_src)print('OK')

Tips:
1、本例的目的:爬取一个网页中的多张图片;

2、技术手段:导入bs4包,使用BeautifulSoup函数解析html,find_all('tag',attrs='')函数定位图片所在位置,get('src')函数获取src对应的网页。即可下载图片。

简单来说,BeautifulSoup-find_all-get三连函数,获取图片对应的img_src,然后下载即可。

缺陷:

1、本例的代码仅仅适用于百度贴吧网页的爬取,若切换到其他网页,html格式改变,相应的src获取方式也要改变;

2、百度贴吧存在翻页功能,如何获取多个页面的多张图片呢?下个实例再来探讨~

Python爬虫实例(2)-用BeautifulSoup爬取一个网页上的多张照片(以百度贴吧为例)相关推荐

  1. python爬虫网页中的图片_Python爬虫爬取一个网页上的图片地址实例代码

    本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request. ...

  2. python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件

    传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...

  3. python爬虫实例——某二手车数据爬取

    某二手车网站数据爬取 要求: 找到所要爬取的网站网址(url): 今天案例的网址(url):https://www.guazi.com/gy/dazhong/o1/#bread. 观察网站,点开检查, ...

  4. Python爬虫之四:使用BeautifulSoup爬取微博热搜

    (一)安装BeautifulSoup模块 目前,Beautiful Soup 的最新版本是 4.x 版本,之前的版本已经停止开发了.这里推荐使用 pip 来安装,安装命令如下: pip install ...

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

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

  6. Python 爬虫实例(4)—— 爬取网易新闻

    自己闲来无聊,就爬取了网易信息,重点是分析网页,使用抓包工具详细的分析网页的每个链接,数据存储在sqllite中,这里只是简单的解析了新闻页面的文字信息,并未对图片信息进行解析 仅供参考,不足之处请指 ...

  7. python爬取贴吧所有帖子-Python爬虫实例(一)爬取百度贴吧帖子中的图片

    程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 ?后面为查询字 ...

  8. Python 爬虫实例(7)—— 爬取 新浪军事新闻

    我们打开新浪新闻,看到页面如下,首先去爬取一级 url,图片中蓝色圆圈部分 第二zh张图片,显示需要分页, 源代码: # coding:utf-8import json import redis im ...

  9. Python 爬虫实例(6)—— 爬取蚂蚁免费代理

    数据库表sql语句: CREATE TABLE `free_ip` (`free_ip_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`ip` va ...

最新文章

  1. 史上最强女游戏程序员
  2. datanucleus mysql_DataNucleus Access Platform 3.1.2发布
  3. Unsupported ONNX opset version: 11
  4. IAAS、PAAS与SAAS
  5. spyder pyecharts不显示_165Hz+1ms仅需千元左右 优派VX2771HDPRO显示器
  6. pandas用众数填充缺失值_7步搞定数据清洗-Python数据清洗指南
  7. jquery 判断控件css样式,jQuery获取并设置CSS类
  8. 【干货】打造优秀B端产品需求分析流程要点
  9. [剑指Offer] 42.和为S的两个数字
  10. spring boot(一):Hello World
  11. String字符串按多个字符Split方法
  12. PTA 乙级 1003 我要通过! (20 分) C++
  13. 【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-大学组 | 精品题解
  14. 对普通文件 霍夫曼编解码 matlab,JPEG编解码过程详解(二)
  15. android解压rar方法,安卓手机如何解压rar/zip/7z等压缩包 详细图解教程
  16. 律师登台痛批,BSA置身事外
  17. 一篇文章带你搞透redis高性能IO模型
  18. CATIA V5 R24 2014安装教程
  19. 喵 ~ 小程序搭建记录
  20. kettle连接设置字符编码

热门文章

  1. 全国php工资城市排名,2019年各城市工资排行_2019年全国各城市最新工资排行出炉 想去哪玩来对...
  2. 写给你看的Python Web 岗位分析,求职必备
  3. win7笔记本网络连接图标一直转圈但可上网
  4. QT自定义控件--时钟
  5. linux firefox 版本升级,在openSUSE Linux下升级firefox至4.0版本的方法
  6. 零基础学c语言如何开始
  7. 加载property配置文件
  8. Dremel学习总结1
  9. 用PXE方法从裸机批量推Oracle 11gR2 RAC环境
  10. 读《如何有效阅读一本书:超实用笔记读书法》