500px的高清图片抓取和定时微博发送
Created at 2017-08-20 Updated at 2018-05-17 Category Crawler
Fetch
500px网站上的照片由于版权保护等原因是无法下载的,图片右键只会显示这是谁的照片,没法保存。
但是上面的图片真的拍得好棒,让人心生歹念。其实在浏览该站的时候,图片都是动态加载的,我们每次向下滚动鼠标时,网页会向服务器请求获得一组照片的数据,我们只要盯着请求的格式和返回的json包就可以提取出图片的各项信息。
上图中是请求得到的一个photo的详细信息,包括name、camera、taken place等等,最重要的高清图片URL是在images列表里:
每个列表里有十个不同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张。
由于图片版权之类的原因,这些东西仅作学习交流,切勿商用。