1 import urllib.request
2 import re
3 import os
4 import datetime
5 import easygui
6
7 # 获取网页
8 def get_html(url):
9 page = urllib.request.urlopen(url)
10 html = page.read().decode('utf-8') #需要解码
11 return html
12
13 # 下载图片
14 def get_image(path,html):
15 # 获取HTML源码里面的app.page["pins"]部分,主要图片ID位于此部分
16 get_app_page_pins = re.compile(r'app\.page\["pins"\].*?;', re.S)
17 get_str = re.findall(get_app_page_pins, html)[0]
18
19 pin_id = r'"pin_id":(\d+)'
20 pin_id_re = re.compile(pin_id)
21
22 # 获取图片ID,保存在列表中
23 id_list = re.findall(pin_id_re,get_str)
24
25 x = 0
26 for pinId in id_list:
27 # 获取跳转网页网址
28 url_str = r'http://huaban.com/pins/%s/' % pinId
29 # 获取点击图片时弹出网页的源码
30 pinId_source = get_html(url_str)
31 # 解析源码,获取原图片的网址
32 img_url_re = re.compile('main-image.*?src="(.*?)"', re.S)
33 img_url_list = re.findall(img_url_re, pinId_source)
34 try:
35 img_url = 'http:' + img_url_list[0]
36 urllib.request.urlretrieve(img_url, path + '\%s.jpg' % x)
37 except:
38 print("获取图片:%s失败,跳过,获取下一张。" % img_url)
39 continue
40 print("获取成功!%s" % img_url)
41 x += 1
42 print("保存图片成功!")
43
44 # 创建文件夹路径
45 def createPath():
46 while True:
47 print('选择你要保存的路径')
48 path = easygui.diropenbox()
49
50 filePath = path + "\\" + str(datetime.datetime.now().strftime('%Y-%m-%d %H.%M.%S'))
51
52 isExists = os.path.exists(filePath)
53 if not isExists:
54 # 创建目录
55 os.makedirs(filePath)
56 print('%s创建成功!' % filePath)
57 break
58 else:
59 print('%s已存在重新输入!' % filePath)
60 return filePath
61
62 if __name__ == '__main__':
63 html = get_html("http://huaban.com/favorite/beauty/")
64 get_image(createPath(), html) #调用创建文件夹方法并返回文件夹路径和传入网址