500px的高清图片抓取和定时微博发送

Created at 2017-08-20 Updated at 2018-05-17 Category Crawler Tag 500px / weibo / python

Fetch

500px网站上的照片由于版权保护等原因是无法下载的,图片右键只会显示这是谁的照片,没法保存。

但是上面的图片真的拍得好棒,让人心生歹念。其实在浏览该站的时候,图片都是动态加载的,我们每次向下滚动鼠标时,网页会向服务器请求获得一组照片的数据,我们只要盯着请求的格式和返回的json包就可以提取出图片的各项信息。

返回的json包示例

上图中是请求得到的一个photo的详细信息,包括name、camera、taken place等等,最重要的高清图片URL是在images列表里:

photo URLs

每个列表里有十个不同size的URL,我们获取size 2048的URL即可直接访问高清图片并下载。

Post

我们获得下载的图片后可以每隔一小时发送一张图片到微博。这里需要申请一个微博APP,之后调用微博的API即可发送。微博的SDK我没有使用官方的python实现,而是采用了一个更加简洁干净的版本weibo,感谢作者的分享。没采用官方的API是因为貌似官方版本的APP授权在一定时间后会失效,需要定时手动更新授权,但简洁版本只需要提供用户名和密码就可以永久授权,比较方便。

微博发图的效果如下:
微博效果

由于发的是好友圈,可能要互粉之后才能看到,我的微博就在左上角。

fetch和post的代码都在500px_photos

MISC

  • 需要在本机建立名为500px的MongoDB数据库,fetch和post都需要用到,而图片文件保存到文件系统即可。

  • 我抓取500px时是带着cookie的,但貌似不带也可以爬,没有进一步验证。

  • 我每天抓取一次,每次抓三个部分popular、editor和stock(这个在2018.05时看貌似变成fresh了?),每部分抓20轮,每轮50张。

  • 由于图片版权之类的原因,这些东西仅作学习交流,切勿商用。

Table of Content

  1. Fetch
  2. Post
  3. MISC
Site by Haotian WU using Hexo & Random

Life is short, you need Python.

Hide