#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
作业:把千图网(http://www.58pic.com/)某个频道的所有高清版图片爬下来
@author: solodonut
爬取频道:平面/设计
网址规律:http://www.58pic.com/pm/id-1.html,其中’pm/id-‘后面数字为页码,最大页数=200
图片地址规律:大图在缩略图基础上多了_1024这几个字符串
缩略小图:http://pic.qiantucdn.com/58pic/23/35/76/64Y58PICF6b.jpg
对应大图:http://pic.qiantucdn.com/58pic/23/35/76/64Y58PICF6b_1024.jpg
"""
import urllib.request
import re
import os
# 全局变量定义开始---------------------------------------
url_page_prefix = 'http://www.58pic.com/pm/' # 平面/设计 频道地址前缀,后面为页码.html
max_page = 200 # 最大下载页数
pat_thumbnail = '(http://pic.qiantucdn.com/58pic/.*?).jpg'
export_main_dir = 'images/' # 图片保存到当前路径下images文件夹
opener = urllib.request.build_opener() # 定义opener
# 全局变量定义结束---------------------------------------
# 函数定义开始------------------------------------------
# page_url: 要分析的网址
# export_path: 导出路径,在py文件同一级创建文件夹,图片加载到该文件夹
def retrive_image(page_url,export_dir):
# 获取网页内容
content = opener.open(page_url).read().decode('utf-8','ignore')
img_list = re.compile(pat_thumbnail).findall(content)
for i in range(0,len(img_list)):
try:
this_file = export_dir + str(i) + '.jpg' # 导出文件路径
this_image_url = img_list[i] + '_1024.jpg' # 通过缩略图地址加后缀获取大图地址
print('开始下载图片到 '+ this_file + '===')
urllib.request.urlretrieve(this_image_url,filename = this_file)
print('下载完毕到 '+ this_file + '===')
except Exception as er:
print(er)
# 函数定义结束------------------------------------------
# 主程序开始-------------------------------------------
for i in range(0,max_page):
# 获取网址
this_url = url_page_prefix + str(i+1) + '.html'
# 保存路径
this_export_path = export_main_dir + 'page' + str(i+1) + '/'
# 获取导出目录,如果不存在就创建
if not os.path.exists(this_export_path):
os.makedirs(this_export_path)
# 下载并保存到文件
retrive_image(this_url,this_export_path)