来看看修改好的新的代码html
#!/usr/bin/env python # -*- coding: UTF-8 -*- __author__ = '217小月月坑' ''' 网页跳转,相册图片下载 下载大图片 ''' import urllib import urllib2 import re import os # 极视界主页 home_url = 'http://product.yesky.com/more/506001_31372_photograph_1.shtml' user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0' headers = {'User-Agent':user_agent} try: home_request = urllib2.Request(home_url,headers=headers) home_response = urllib2.urlopen(home_request) home_conents = home_response.read().decode("gbk") # 使用RE在主页源码获取相册的网址和相册名字 home_pattern = re.compile(r'<dt><a href="(.*?)" title="(.*?)"',re.S) # 返回存有相册的网址的列表 album_urls = re.findall(home_pattern,home_conents) for album_url in album_urls: print album_url[0],album_url[1] # 以相册名字建立文件夹 path = r'/home/ym/test/'+album_url[1] os.mkdir(path) # 传入相册网址 album_response = urllib2.urlopen(album_url[0]) album_conents = album_response.read().decode("gbk") album_pattern = re.compile(r'<li >.*?<a href="(.*?)".*?</li>',re.S) photo_urls = re.findall(album_pattern,album_conents) i = 1 print '正在下载'+album_url[1]+'相册里的图片' for photo_url in photo_urls: photo_response = urllib2.urlopen(photo_url) photo_conents = photo_response.read().decode("gbk") photo_pattern = re.compile(r'class="effect".*?<img src="(.*?)"',re.S) img_urls = re.findall(photo_pattern,photo_conents) for img_url in img_urls: # path 是一个字符串,因此要拼接上'/'才能表示路径 img_path = path+'/'+str(i) # 自增操做,好像i++ 在这里用不了 i+=1 # 下载图片 urllib.urlretrieve(img_url,img_path) print '图片'+img_path+'下载完成' print '相册'+album_url[1]+'下载完成!!!!!' except urllib2.URLError,e: if hasattr(e,"code"): print e.code if hasattr(e,"reason"): e.reason
运行结果以下:python
好吧又出现了一个错误,其实这个错误我原本是不想写的,不过某天看到QQ群里面有人问起这个错误是怎么回事,因此就在这里提一下,仍是将错误信息复制而后百度测试
"缘由就是python的str默认是ascii编码,和unicode编码冲突,就会报这个标题错误"编码
解决方法就是将中文的部分改为 u'中文' 的形式,在上面的程序中,中文一共出现3次,将它们修改成url
print u'正在下载'+album_url[1]+u'相册里的图片' print u'图片'+img_path+u'下载完成' print u'相册'+album_url[1]+u'下载完成!!!!!'
好了,修改代码以后测试看看吧
code