程序员如何一键“Get”高清壁纸?

2019 年 3 月 9 日 CSDN

作者 | 沈仲强

责编 | 郭   芮

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


以上,就可以爬取出精美的高清壁纸啦。


作者:沈仲强,资深Python程序员,先后供职于Morgan Stanley和ebay,擅长爬虫、Web开发、数据分析。

本文系作者投稿,版权归原作者所有。



 热 文 推 荐 

☞ GitHub 日收 7000 星,Windows 计算器项目开源即爆红!

☞ Python 为何能成最强编程语言?!

☞ 王思聪也救不了熊猫直播了?

☞ 程序员撒狗粮!3 天开发自己的婚礼小程序!

☞ 300道Python面试题,备战春招!

☞ 5年Go语言经验薪资翻倍! 这份全球职业报告中, 区块链开发者薪资排第三, 前两名你绝对想不到!(含完整版下载资源)

☞ 女神节 |  那些奋斗在IT领域的“女神”们

☞ 没有一个人,能躲过程序员的诱惑!

System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

喜欢就点击“好看”吧!
登录查看更多
0

相关内容

【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
198+阅读 · 2020年6月29日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
164+阅读 · 2020年5月14日
【资源】100+本免费数据科学书
专知会员服务
108+阅读 · 2020年3月17日
【电子书】让 PM 全面理解深度学习 65页PDF免费下载
专知会员服务
18+阅读 · 2019年10月30日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
30+阅读 · 2019年10月17日
开源书:PyTorch深度学习起步
专知会员服务
51+阅读 · 2019年10月11日
3 行代码 5 秒抠图的 AI 神器,根本无需 PS
大数据技术
20+阅读 · 2019年7月24日
告别 PS !3 行代码 5 秒搞定抠图的 AI 神器!
程序人生
6+阅读 · 2019年7月11日
已删除
创业邦杂志
5+阅读 · 2019年3月27日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
[机器学习] 用KNN识别MNIST手写字符实战
机器学习和数学
4+阅读 · 2018年5月13日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
tensorflow LSTM + CTC实现端到端OCR
数据挖掘入门与实战
8+阅读 · 2017年11月15日
Factor Graph Attention
Arxiv
6+阅读 · 2019年4月11日
Arxiv
15+阅读 · 2019年3月16日
Learning Implicit Fields for Generative Shape Modeling
Arxiv
10+阅读 · 2018年12月6日
Arxiv
3+阅读 · 2018年1月31日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
198+阅读 · 2020年6月29日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
164+阅读 · 2020年5月14日
【资源】100+本免费数据科学书
专知会员服务
108+阅读 · 2020年3月17日
【电子书】让 PM 全面理解深度学习 65页PDF免费下载
专知会员服务
18+阅读 · 2019年10月30日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
30+阅读 · 2019年10月17日
开源书:PyTorch深度学习起步
专知会员服务
51+阅读 · 2019年10月11日
相关资讯
3 行代码 5 秒抠图的 AI 神器,根本无需 PS
大数据技术
20+阅读 · 2019年7月24日
告别 PS !3 行代码 5 秒搞定抠图的 AI 神器!
程序人生
6+阅读 · 2019年7月11日
已删除
创业邦杂志
5+阅读 · 2019年3月27日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
[机器学习] 用KNN识别MNIST手写字符实战
机器学习和数学
4+阅读 · 2018年5月13日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
tensorflow LSTM + CTC实现端到端OCR
数据挖掘入门与实战
8+阅读 · 2017年11月15日
Top
微信扫码咨询专知VIP会员