前篇回顾:如何已知图片的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相关推荐

  1. Python网络爬虫小试刀——抓取ZOL桌面壁纸图片3

    前篇回顾:下载一个类型集合的全部图片 本篇目标:获得一个集合页面中所有集合中所有的图片 使用urllib2获取已知集合网页页面的HTML代码,首先使用正则表达式获取本页图片集合的url,根据上篇所写戏 ...

  2. python网络爬虫——使用selenium抓取东方财富网上市公司公告

    每日公告数量@TOC 一.数据获取与预处理 本文从东方财富网上市公司公告页面获取沪深A股1991-2019年公告数据,按照数据获取的先后顺序,将数据分为以下两个部分一是上市公司公告信息,包括:序号(i ...

  3. Python网络爬虫实战:抓取和分析天猫胸罩销售数据

    本文实现一个非常有趣的项目,这个项目是关于胸罩销售数据分析的.Google曾给出了一幅世界女性胸部尺寸分布地图 ,从地图中可以明显看出中国大部分地区呈现绿色(表示平均胸部尺寸为A罩杯),少部分地区呈现 ...

  4. python网络爬虫实战3——抓取新闻内文相关信息

    详细代码见:http://download.csdn.net/download/vinsuan1993/10258596 一.需求说明 我们通过上一篇博客(http://blog.csdn.net/c ...

  5. python爬取ZOL桌面壁纸图片

    最近迷上了爬虫,看了一丢丢视频学习之后,开始实战,爬取图片地址: http://desk.zol.com.cn/ 循环爬取"风景"图片,实现代码如下: from urllib im ...

  6. [day1]python网络爬虫实战:爬取美女写真图片

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...

  7. [day2]python网络爬虫实战:爬取美女写真图片(增强版)

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...

  8. [day4]python网络爬虫实战:爬取美女写真图片(Scrapy版)

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.Scrapy简介 4. ...

  9. Python 网络爬虫实战:爬取知乎回答中的全部图片

    平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...

最新文章

  1. premiere pr 视频截图
  2. poj 2240 Arbitrage (floyd 变形)
  3. Machinations——可视化游戏设计
  4. 打造轻量级可视化数据爬取工具-菩提
  5. 梯度下降法_梯度下降
  6. 教你从零开始搭建一款前端脚手架工具
  7. esp8266oled做时钟python_利用esp8266和鸿蒙带的OLED屏做了一个时钟
  8. .net Redis缓存优化提高加载速度和服务器性能(一)
  9. 陷阱计算机音乐谱大全,陷阱 原版C调-王北车-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
  10. Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型
  11. NavigateUr l动态参数 格式化参数
  12. 刘逖:ETF市场迎来发展时机 可从产品创新等方面推动
  13. 我的世界1.12.2java下载_我的世界1.12.2电脑版下载
  14. 已知三角函数值用计算机如何求角度,【已知三角函数值求角度】第一册已知三角函数值求角...
  15. Nginx的try_files指令详解
  16. 怎么把用c语言开发的程序变成软件
  17. java中各种类型所占内存空间大小
  18. 互联网思维的营销解读
  19. 小型企业Azure云迁移大型指南
  20. 考研复试问答(操作系统部分)

热门文章

  1. 计算机操作系统u盘的安装方法,acer电脑U盘重装操作系统的方法
  2. 金蝶云二开引入excel的方法
  3. 氮化镓充电器芯片 NV6128、NV6127、NV6125 QFN6x8mm
  4. 《大话数据结构》3、4、5线性表、栈与队列、串
  5. Practice02
  6. S5PV210 WM8960音频驱动 学习
  7. (搜索) 跳棋系列1
  8. 2005中国计算机网络安全应急年会会议报告资料下载
  9. HCIE-Security Day48:AC准入控制Portal
  10. UE4 C++ 一个Character踩地雷