作者:强哥,现供职于一家大型全球电子商务网站,多年Python程序员,热爱数据,热爱AI,希望能与更多同业人交流。
个人公众号:Python与数据分析
Unsplash是个高清摄影图片的网站,里面的照片非常精美,分辨率也很高,最重要的是,所有的照片都没有版权,无须向原作者申请授权,即可任意使用。
最近闲暇的时候写了个爬虫爬了下Unsplash上的那些高赞的壁纸。爬虫原理非常简单,就是爬取所有的壁纸,然后筛选那些赞数最高的图片。
代码实现
第一步我们爬取Unsplash所有的壁纸图片信息,并存入MongoDB,代码如下
def get_image_by_page(page_no):
url = "https://unsplash.com/napi/collections/1065976/photos?page={}&per_page=10&order_by=latest&share_key=a4a197fc196734b74c9d87e48cc86838".format(page_no)
r = requests.get(url, verify=False)
data = r.json()
return datadef get_images():
page_no = 1
client = pymongo.MongoClient()
db = client["unsplash"]
while True:
result = get_image_by_page(page_no)
if len(result) == 0:
break
db.wallpaper.insert_many(result)
print(page_no)
page_no += 1
time.sleep(10)
爬下来的数据里面包含了几个重要的字段。
我们最关心的就是likes这个字段,这个里面存了图片的赞数,后续我们筛选高赞图片的时候会用到。
还有两个字段分别是width和height,这是图片的宽度和高度,因为我们这里关注的是桌面壁纸,所以只关心宽度大于高度的那些壁纸。
爬完图片信息后,接下来我们从数据库筛选高赞图片,代码如下
def get_top_liked_images():
client = pymongo.MongoClient()
db = client["unsplash"]
cursor = db.wallpaper.aggregate([
{"$match": {"likes": {"$gte": 1000}}}
])
path = os.path.dirname(__file__)
path = os.path.join(path, "wallpaper")
for item in cursor:
url = item["urls"]["raw"]
width = item["width"]
height = item["height"]
if width <= height:
continue
r = requests.get(url, verify=False)
filename = "{}.jpg".format(int(time.time()))
filepath = os.path.join(path, filename)
with open(filepath, "wb") as f:
f.write(r.content)
print(filepath)
time.sleep(10)
这里我们会根据图片信息里的URL去下载图片。需要注意的是,如果过于频繁的爬取Unsplash,会导致爬虫被封,所以这里每次下载完都会睡个10秒钟。
高赞壁纸
我们从爬取的结果里面精选了80张高赞壁纸,没有加任何水印,放在这里。不过微信对上传的图片作了压缩,所以上传后的图片不是原图,分辨率有些损失。需要原图的话在文末有获取方式。
下面是80张无水印高赞壁纸,大家看看最喜欢哪一张呢,欢迎在留言里告诉我~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
完整代码已上传github,所有原图已上传百度网盘,可在公众号后台回复unsplash获取。
Python的爱好者社区历史文章大合集:
2018年Python爱好者社区历史文章合集(作者篇)
福利:文末扫码关注公众号,“Python爱好者社区”,开始学习Python课程:
关注后在公众号内回复“ 课程 ”即可获取:
小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】
小编的Python的入门免费视频课程!
小编的Python的快速上手matplotlib可视化库!
崔老师爬虫实战案例免费学习视频。
陈老师数据分析报告扩展制作免费学习视频。
玩转大数据分析!Spark2.X + Python精华实战课程免费学习视频。