Python网络爬虫小试刀——抓取ZOL桌面壁纸图片2
前篇回顾:如何已知图片的url下载图片
本篇目标:下载一个类型集合的全部图片
使用urllib2获取,首先使用正则表达式获取本页图片的url,根据上篇所写downloadImg函数将图片下载到指定文件夹,并将图片命名为集合名字(即为文件夹名字)+图片序列号,然后判断是否还有下一页。如果有的话则进入下一页进行同样的动作,直到最后一页则本集合图片下载完毕。
首先,根据url = ‘http://desk.zol.com.cn/bizhi/6128_75825_2.html’ 获取HTML代码:
26 def getImgAssemble(url):27 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'28 headers = {'User-Agent' : user_agent}2930 try:31 request = urllib2.Request(url, headers=headers)32 content = urllib2.urlopen(request).read().decode('GBK')3334 print content3536 except AttributeError:37 print 'attributeError'38 except urllib2.URLError, e:39 if hasattr(e, 'code'):40 print e.code41 if hasattr(e, 'reason'):42 print e.reason43
结果如下:
结果太长,仅截取开头的一部分,后面会用到其它部分再说。
OK,获取HTML代码之后就可以分析一下来获取我们需要的部分,然后利用正则表达式来截取里面的我们需要的东西了。
我们首先需要截取本页图片的url地址,地址所在位置截图如下:
我们需要的是 <img id="bigImg" src="http://desk.fd.zol-img.com.cn/g5/M00/03/02/ChMkJ1ZvgYGIA7KLAASiv9XjLBcAAGLvwE3tzEABKLX802.jpg" srcs="http://desk.fd.zol-img.com.cn/g5/M00/03/02/ChMkJlZvgYGIYOBIAAArsOf39JQAAGLvwE8WggAACvI891.jpg" width="960" height="600">中的http://desk.fd.zol-img.com.cn/g5/M00/03/02/ChMkJ1ZvgYGIA7KLAASiv9XjLBcAAGLvwE3tzEABKLX802.jpg这个地址。
获取url的正则表达式如下:
‘<img\s+id="bigImg"\s+src="(.+?)"\s*srcs=".+?"\s+width="\d+"\s+height="\d+">’
PS:
.+? 和.*?很好用,可以择机使用。
.+? 和.*?很好用,可以择机使用。
.+? 和.*?很好用,可以择机使用。
截取结果如下:
http://desk.fd.zol-img.com.cn/g5/M00/03/02/ChMkJ1ZvgYGIA7KLAASiv9XjLBcAAGLvwE3tzEABKLX802.jpg
还需要什么东西从里面截取的?
还有很多,图片的序列号,图片的类型,是否还有下一页的标记。
*图片的序列号位于HTML代码中的位置如下:
那个titleName后面那个括号里 main。正则表达式如下:
‘<h3><a\s+id="titleName"\s+href=".+?">.+?</a><span>.+?(\d+).+?</span></h3>’
*图片的类型,这个可以在刚刚获得的图片的url(命名为imgUrl)中获得,即下面黄色标记的内容
http://desk.fd.zol-img.com.cn/g5/M00/03/02/ChMkJ1ZvgYGIA7KLAASiv9XjLBcAAGLvwE3tzEABKLX802.jpg
正则表达式为:
’http://.+?\..+?/.+?\.(.+?)$‘
*下面是是否有下一页的标记,如图:
有下一页的时候是这样的:
没有的时候是这样的:
可以看出,没有下一页的时候url的地方是'javascripe;:',所以说,只要判断是否有这个字符串就可以了。如果不是的话,就将下个图片的地址截取下来。
正则表达式如下:
'<a\s+id="pageNext"\s+class="next"\s+href="(.+?)"\s+title=".+?">'
我们写的函数getImgAssemble出了url还需要图片文件夹的名字(图片的名字为文件夹的名字➕图片序号),图片保存的路径,所以函数变成了
def getImgAssemble(url, fileName, filePath):
本函数整体代码如下
1 #/usr/bin/env python23 import os4 import re5 import urllib6 import urllib278 mUrl = 'http://desk.zol.com.cn'910 def downloadImg(url, imgName, savePath):11 if savePath == '':12 return 'image save path is nil.'13 if imgName == '':14 return 'image is nil.'15 if url == '':16 return 'url is nil.'1718 if not os.path.exists(savePath):19 os.makedirs(savePath)20 if not savePath.endswith('/'):21 savePath += '/'2223 savePathName = savePath + imgName2425 urllib.urlretrieve(url, savePathName)2627 print url2829 def getImgAssemble(url, fileName, filePath):30 if not os.path.exists(filePath):31 os.makedirs(filePath)32 if not filePath.endswith('/'):33 filePath += '/'34 if not fileName in filePath:35 filePath += fileName3637 print '******', url38 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'39 headers = {'User-Agent' : user_agent}4041 tmoUrl = url42 while True:43 try:44 request = urllib2.Request(<span style="font-family: Arial, Helvetica, sans-serif;">tmpUrl</span><span style="font-family: Arial, Helvetica, sans-serif;">, headers=headers)</span>45 content = urllib2.urlopen(request).read().decode('GBK')46 imgUrl = re.search('<img\s+id="bigImg"\s+src="(.+?)"\s*srcs=".+?"\s+width="\d+"\s+heig ht="\d+">', \47 content).group(1)48 imgCount = re.search('<h3><a\s+id="titleName"\s+href=".+?">.+?</a><span>.+?(\d+).+?</s pan></h3>', \49 content).group(1)5051 imgSuffix = re.search('http://.+?\..+?/.+?\.(.+?)$', \52 imgUrl).group(1)53 imgName = fileName + imgCount + '.' + imgSuffix54 downloadImg(imgUrl, imgName, filePath)5556 nextUrlFlag = re.search('<a\s+id="pageNext"\s+class="next"\s+href="(.+?)"\s+title=".+? ">', \57 content).group(1)5859 if not "javascript:" in nextUrlFlag:60 tmpUrl = mUrl + nextUrlFlag61 continue62 else:63 print '\n'64 break6566 except AttributeError:67 print 'attributeError'68 except urllib2.URLError, e:69 if hasattr(e, 'code'):70 print e.code71 if hasattr(e, 'reason'):72 print e.reason737475 def main():76 url = 'http://b.zol-img.com.cn/desk/bizhi/image/7/960x600/1450950428732.jpg'77 #img name478 imgName = 'pic1.jpg'79 #img save path80 savePath = os.getcwd()8182 #downloadImg(url, imgName, savePath)8384 sUrl = 'http://desk.zol.com.cn/bizhi/6128_75825_2.html'85 fileName = 'meinv'86 getImgAssemble(sUrl, fileName, savePath)8788 if __name__ == '__main__':89 main()90
原谅我那缺少注释的代码吧。。。
结果如图:
下载下来的图片如下:
图片的名字和文件夹的名字将在上一层获得命名,所以现在先命名为meinv。
the end
谢谢
下篇预告:获得一个集合页面中所有集合中所有的图片。
另,昨天1227是我大雏田君的生日,happy birthday,ヒナタ…… ^_^
Python网络爬虫小试刀——抓取ZOL桌面壁纸图片2相关推荐
- Python网络爬虫小试刀——抓取ZOL桌面壁纸图片3
前篇回顾:下载一个类型集合的全部图片 本篇目标:获得一个集合页面中所有集合中所有的图片 使用urllib2获取已知集合网页页面的HTML代码,首先使用正则表达式获取本页图片集合的url,根据上篇所写戏 ...
- python网络爬虫——使用selenium抓取东方财富网上市公司公告
每日公告数量@TOC 一.数据获取与预处理 本文从东方财富网上市公司公告页面获取沪深A股1991-2019年公告数据,按照数据获取的先后顺序,将数据分为以下两个部分一是上市公司公告信息,包括:序号(i ...
- Python网络爬虫实战:抓取和分析天猫胸罩销售数据
本文实现一个非常有趣的项目,这个项目是关于胸罩销售数据分析的.Google曾给出了一幅世界女性胸部尺寸分布地图 ,从地图中可以明显看出中国大部分地区呈现绿色(表示平均胸部尺寸为A罩杯),少部分地区呈现 ...
- python网络爬虫实战3——抓取新闻内文相关信息
详细代码见:http://download.csdn.net/download/vinsuan1993/10258596 一.需求说明 我们通过上一篇博客(http://blog.csdn.net/c ...
- python爬取ZOL桌面壁纸图片
最近迷上了爬虫,看了一丢丢视频学习之后,开始实战,爬取图片地址: http://desk.zol.com.cn/ 循环爬取"风景"图片,实现代码如下: from urllib im ...
- [day1]python网络爬虫实战:爬取美女写真图片
l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...
- [day2]python网络爬虫实战:爬取美女写真图片(增强版)
l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...
- [day4]python网络爬虫实战:爬取美女写真图片(Scrapy版)
l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.Scrapy简介 4. ...
- Python 网络爬虫实战:爬取知乎回答中的全部图片
平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...
最新文章
- premiere pr 视频截图
- poj 2240 Arbitrage (floyd 变形)
- Machinations——可视化游戏设计
- 打造轻量级可视化数据爬取工具-菩提
- 梯度下降法_梯度下降
- 教你从零开始搭建一款前端脚手架工具
- esp8266oled做时钟python_利用esp8266和鸿蒙带的OLED屏做了一个时钟
- .net Redis缓存优化提高加载速度和服务器性能(一)
- 陷阱计算机音乐谱大全,陷阱 原版C调-王北车-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
- Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型
- NavigateUr l动态参数 格式化参数
- 刘逖:ETF市场迎来发展时机 可从产品创新等方面推动
- 我的世界1.12.2java下载_我的世界1.12.2电脑版下载
- 已知三角函数值用计算机如何求角度,【已知三角函数值求角度】第一册已知三角函数值求角...
- Nginx的try_files指令详解
- 怎么把用c语言开发的程序变成软件
- java中各种类型所占内存空间大小
- 互联网思维的营销解读
- 小型企业Azure云迁移大型指南
- 考研复试问答(操作系统部分)