Python爬虫实例(2)-用BeautifulSoup爬取一个网页上的多张照片(以百度贴吧为例)
来源:互联网 发布:装修设计软件绿色版 编辑:程序博客网 时间:2024/06/05 11:17
上一篇博客,实现了下载一张图片的简单爬虫。但是其代码,仅仅能下载一张图片。爬虫作为数据分析的第一步工作,需要爬取的是海量数据;假设我想下载一个网站几十张图片,那怎么实现呢?
首先,我们利用框图或者伪代码,理清一下思路。我想要下载多张图片,思路如下:
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("http://tb2.bdstatic.com/tb/static-pb/img/cur_zin.cur"), 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 requestsimport osfrom 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类、htmlimg_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')
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爬取一个网页上的多张照片(以百度贴吧为例)
- Python爬虫实例(3)-用BeautifulSoup爬取多个可翻页网页上的多张照片
- python学习(7):python爬虫之爬取动态加载的图片,以百度图片为例
- 爬虫实例:爬取一个网页上的图片地址
- python爬取动态生成的网页——以百度手机助手为例
- Python爬虫urllib笔记(四)之使用BeautifulSoup爬取百度贴吧
- Python爬虫实例--爬取百度贴吧小说
- Python 爬虫(以赛马数据为例)之使用BeautifulSoup进行Html解析
- python网络爬虫学习(二)一个爬取百度贴吧的爬虫程序
- java 网页爬虫(以扒取amazon网页信息为例)
- Python爬虫(2)--BeautifulSoup的使用
- 一个小的爬虫实例——爬取百度贴吧图片
- Python爬虫:Selenium+ BeautifulSoup 爬取JS渲染的动态内容(雪球网新闻)
- Python爬虫实例(4)-用urllib、re和正则表达式爬取网页图片
- python用BeautifulSoup库简单爬虫入门+案例(爬取妹子图)
- Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫
- 百度贴吧的内容的爬取,以一个NBA吧的实例,在python3.6上,IDE是pycharm,最新的正则。
- 简单的python爬虫程序(爬取百度贴吧帖子)
- NS2中的WirelessPhyExt工作机制研究
- <学习CSS>第三天笔记-css外观属性(颜色、行间距、对齐、首行缩进、字间距、单词间距 、颜色半透明、阴影)快捷方式、综合案例、引入CSS样式表(内部样式表、行内式、外部样式表)、三种样式表总结
- CS229学习笔记之朴素贝叶斯
- 求圆柱体积
- 机器学习_线性分类器
- Python爬虫实例(2)-用BeautifulSoup爬取一个网页上的多张照片(以百度贴吧为例)
- 异常:程序包org.apache.http不存在 的问题解析
- Android 属性动画的简单使用
- 润乾V5多层交叉填报表制作
- 网易2018校园招聘编程题真题集合3字符串碎片
- 编程题:统计字符串中字符出现的次数
- 百度地图API详解之地图标注(一)
- NFS服务端的配置和客户端的访问
- Linux~常用的命令