中午面试回来逛 V2EX ,发现有个博友很喜欢 Unsplash 这个网站的图片,于是写了个脚本,把全站爬了下来。

脚本用 Python 写的,依赖 Requests ,BeautifulSoup 模块,直接使用 pip install requests beautifulsoup4 即可安装,建议使用国外的 VPS 爬,速度很好。

我 2014 年 9 月 25 日爬的数据可以去百度云下载 http://pan.baidu.com/s/1c0Ae5Cc 密码:ludn 。

运行 python unsplash.py,然后输入最小页数和最大页数即可下载到脚本所在目录的 unsplash 文件夹中。

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

# unsplash 全站下载脚本
# 请先安装 requests ,BeautifulSoup
# pip install requests beautifulsoup4
# 运行 python unsplash.py
# 输入最小页数和最大页数

import os
import requests
from bs4 import BeautifulSoup	

def unsplash(page):
	headers = {
	'Accept':'*/*; q=0.01',
	'Accept-Encoding':'gzip,deflate',
	'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',
	'Cache-Control':'no-cache',
	'Connection':'keep-alive',
	'Referer':'https://unsplash.com/?page={0}'.format(page),
	'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.102 Safari/537.36'
	}
	r = requests.get('https://unsplash.com/?page={0}'.format(page),headers=headers)
	print '爬取第{0}页成功'.format(page)
	soup = BeautifulSoup(r.text)
	urls = soup.select('.photo a')
	pics = []
	for url in urls:
		pics.append(url.get('href'))
	return pics
	
def download(pic):
	headers = {
	'Accept':'*/*; q=0.01',
	'Accept-Encoding':'gzip,deflate',
	'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',
	'Cache-Control':'no-cache',
	'Connection':'keep-alive',
	'Referer':'https://unsplash.com/',
	'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.102 Safari/537.36'
	}
	id = pic.split('/')[-2]
	print '开始下载图片 https://unsplash.com/photos/{0}/download'.format(id)
	with open('unsplash/{0}.jpg'.format(id), 'wb') as f:
		f.write(requests.get('https://unsplash.com/photos/{0}/download'.format(id),headers = headers).content)
	
def main():
	minpage = int(raw_input("请输入最小页数(如 1 ):"))
	maxpage = int(raw_input("请输入最大页数(如 47 ):"))+1
	for page in range(minpage,maxpage):
		pics = unsplash(page)
		for pic in pics:
			download(pic)
	print 'OK'

def mkdir(path): 
    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")
 
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.exists(path)
 
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        print path+' 创建成功'
        # 创建目录操作函数
        os.makedirs(path)
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print path+' 目录已存在'
        return False

if __name__ == "__main__":
	mkdir('unsplash')
	main()

标签:Python爬虫工具