花瓣网图片爬取


 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) #调用创建文件夹方法并返回文件夹路径和传入网址
原文地址:https://www.cnblogs.com/lbx6935/p/9618460.html