专栏首页数据森麟爬了下Unsplash上的高清壁纸,总有一款适合你

爬了下Unsplash上的高清壁纸,总有一款适合你

作者 | shenzhongqiang

来源 | 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秒钟。

本文分享自微信公众号 - 数据森麟(shujusenlin)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python数据可视化:浅谈数据挖掘岗

    没找到如何用Python创建PG数据库,所以数据库的创建在Navicat for PostgreSQL中完成。

    数据森麟
  • Python批量下载无版权图片

    生活或者工作中,不管是写文章、公司 UI 交互图还是广告图等等都需要用到图片,图片的优点和重要性自不用说。

    数据森麟
  • 用Python实时获取地球卫星图并自动更新为桌面

    最近疯狂迷恋地球卫星图和地球的卫星视频,看上面的视频简直极度舒适。不禁想把这种图片作为桌面背景图。这就产生抓取其背景图片作为桌面的想法。

    数据森麟
  • 计算属性的setter和getter

            刚才通过计算lastName和firstName获取了整个姓名,当时我们只是通过一直的data对象中属性进行合成的,这个也就是计算属性(comp...

    十月梦想
  • 我的爬虫自学之旅

    电子版参考书:https://pan.baidu.com/s/15R08yEjLDj8FxrBwnUaTyA 注:仅限网上学习交流,如有侵权请联系我

    py3study
  • Flutter lesson 6: Flutter组件之基础组件(二)

    Row这个Widget其实就是一个布局组件,类似于前端中flex-direction: row;。作用就是可以使Row中的子元素在水平方向上面排列,可以用来做走...

    踏浪
  • 华为网络工程师 | 高级vlan再难咱也不怕,看完这篇文章,原理理解喽,命令也会敲喽!

    sw2 创建vlan 并将相应接口划入相应vlan 和sw1 相连的接口配置trunk

    网络技术联盟站
  • web前端工程师眼中的母亲节

    很多人的眼中都认为程序员很闷骚,很无聊。其实在我们程序员眼中不仅仅只有代码,还有爱,因为我们也是一个正常的人! 我们在代码中也可以彰显对父母的爱:

    用户1272076
  • Linux : E: Unable to locate package XXX

    努力在北京混出人样
  • Python+sklearn使用DBSCAN聚类算法案例一则

    DBSCAN聚类算法概述: DBSCAN属于密度聚类算法,把类定义为密度相连对象的最大集合,通过在样本空间中不断搜索最大集合完成聚类。 DBSCAN能够在带有噪...

    Python小屋屋主

扫码关注云+社区

领取腾讯云代金券