作业5_爬取千图网(平面/设计)频道所有图片

浏览: 1131
#!/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)
推荐 2
本文由 solodonut 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

可以,图贴两张出来,哈

要回复文章请先登录注册