Python爬虫实例(2)-用BeautifulSoup爬取一个网页上的多张照片(以百度贴吧为例)
上一篇博客,实现了下载一张图片的简单爬虫。但是其代码,仅仅能下载一张图片。爬虫作为数据分析的第一步工作,需要爬取的是海量数据;假设我想下载一个网站几十张图片,那怎么实现呢?
首先,我们利用框图或者伪代码,理清一下思路。我想要下载多张图片,思路如下:
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 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爬取一个网页上的多张照片(以百度贴吧为例)相关推荐
- python爬虫网页中的图片_Python爬虫爬取一个网页上的图片地址实例代码
本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request. ...
- python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件
传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...
- python爬虫实例——某二手车数据爬取
某二手车网站数据爬取 要求: 找到所要爬取的网站网址(url): 今天案例的网址(url):https://www.guazi.com/gy/dazhong/o1/#bread. 观察网站,点开检查, ...
- Python爬虫之四:使用BeautifulSoup爬取微博热搜
(一)安装BeautifulSoup模块 目前,Beautiful Soup 的最新版本是 4.x 版本,之前的版本已经停止开发了.这里推荐使用 pip 来安装,安装命令如下: pip install ...
- Python 爬虫实例(1)—— 爬取百度图片
爬取百度图片 在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNightimport json ...
- Python 爬虫实例(4)—— 爬取网易新闻
自己闲来无聊,就爬取了网易信息,重点是分析网页,使用抓包工具详细的分析网页的每个链接,数据存储在sqllite中,这里只是简单的解析了新闻页面的文字信息,并未对图片信息进行解析 仅供参考,不足之处请指 ...
- python爬取贴吧所有帖子-Python爬虫实例(一)爬取百度贴吧帖子中的图片
程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 ?后面为查询字 ...
- Python 爬虫实例(7)—— 爬取 新浪军事新闻
我们打开新浪新闻,看到页面如下,首先去爬取一级 url,图片中蓝色圆圈部分 第二zh张图片,显示需要分页, 源代码: # coding:utf-8import json import redis im ...
- Python 爬虫实例(6)—— 爬取蚂蚁免费代理
数据库表sql语句: CREATE TABLE `free_ip` (`free_ip_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`ip` va ...
最新文章
- 史上最强女游戏程序员
- datanucleus mysql_DataNucleus Access Platform 3.1.2发布
- Unsupported ONNX opset version: 11
- IAAS、PAAS与SAAS
- spyder pyecharts不显示_165Hz+1ms仅需千元左右 优派VX2771HDPRO显示器
- pandas用众数填充缺失值_7步搞定数据清洗-Python数据清洗指南
- jquery 判断控件css样式,jQuery获取并设置CSS类
- 【干货】打造优秀B端产品需求分析流程要点
- [剑指Offer] 42.和为S的两个数字
- spring boot(一):Hello World
- String字符串按多个字符Split方法
- PTA 乙级 1003 我要通过! (20 分) C++
- 【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-大学组 | 精品题解
- 对普通文件 霍夫曼编解码 matlab,JPEG编解码过程详解(二)
- android解压rar方法,安卓手机如何解压rar/zip/7z等压缩包 详细图解教程
- 律师登台痛批,BSA置身事外
- 一篇文章带你搞透redis高性能IO模型
- CATIA V5 R24 2014安装教程
- 喵 ~ 小程序搭建记录
- kettle连接设置字符编码
热门文章
- 全国php工资城市排名,2019年各城市工资排行_2019年全国各城市最新工资排行出炉 想去哪玩来对...
- 写给你看的Python Web 岗位分析,求职必备
- win7笔记本网络连接图标一直转圈但可上网
- QT自定义控件--时钟
- linux firefox 版本升级,在openSUSE Linux下升级firefox至4.0版本的方法
- 零基础学c语言如何开始
- 加载property配置文件
- Dremel学习总结1
- 用PXE方法从裸机批量推Oracle 11gR2 RAC环境
- 读《如何有效阅读一本书:超实用笔记读书法》