/ spider

Python redis储存爬虫信息

起因

有同学说我的个人网站首页背景图会自动切换想法不错,但是背景图好像太过单一和模糊了。于是乎想到去网上爬一些壁纸来用,最好还能每天不带重样的,感觉diaodiao的。爬虫还是用python做,那么问题来了,python爬取的图片怎么传给页面显示呢,这次我们就用redis去储存爬虫爬取的程序,然后让node去获取redis,在通过服务端渲染到页面。

这里顺便安利下这次动手的网站泼辣有图,它的图片都是可以免费让人用的,而且图片质量当壁纸还是不错的。

经过

ok,打开页面,几番尝试,一顿操作,发现图片的信息可以通过接口调用,有2个关键接口。

  1. 获取版本号的接口

调用地址是 http://www.polaxiong.com/collections/get_edition_num,这个版本号主要是用来获取图片集的,后面会讲到。

  1. 获取版本的图片集接口

    调用地址是 http://www.polaxiong.com/collections/get_entries_by_collection_id/39,注意,这里的39就是上一个接口所获取的版本号。它的图片是通过版本号来获取的,一个版本中有10张图片,这里的版本就可以理解为图片集的编号。

  2. 知道2个接口以及接口返回的格式后就好办了,返回的字段开始比较好理解的,用request+json就获取到了图片地址了。这里注意一个点,接口返回的字段中full_res是原图地址,原图很大不推荐用这个,thumb是压缩过的图片,更适合当壁纸。最后我们通过redis缓存图片的地址信息,redis的操作很简单。

import redis

r = redis.Redis(host='localhost', port=6379, db=0)
data = {pic: 'xxxxxx'}
r.set('20170212', json.dumps(data), 24*3600)
print r.get('20170212')

### 结果 ```python # !/usr/bin/env python # encoding: utf-8 import sys import requests import redis import time import json

reload(sys)
sys.setdefaultencoding('utf8')

get_edition_num_url = "http://www.polaxiong.com/collections/get_edition_num"
get_entries_url = "http://www.polaxiong.com/collections/get_entries_by_collection_id/"
r = redis.Redis(host='localhost', port=6379, db=0)

def get_edition_num():
req = requests.get(get_edition_num_url)
res = req.json()

return res['data']['edition']

def get_entries(edition_num):
url = get_entries_url+str(edition_num)
req = requests.get(url)
res = req.json()

pics = res['data']
entries = []

for entry in pics:
	entries.append(entry['thumb'])
return entries

def save_redis(data):
key = time.strftime('%Y%m%d')
r.set(key, json.dumps(data), 24*3600)

def main():
edition_num = get_edition_num()
pic_data = get_entries(edition_num)
save_redis(pic_data)

if name == 'main':
main()

<br>
### PS
* 关于怎么每天更新壁纸信息,其实就是每天执行爬取脚本,详情请看[定时任务](http://blog.sidfate.com/linux-crontab/)
* 关于node端怎么通过redis获取缓存信息,以后有时间再补充

> 更多爬虫技巧请戳[传送门](/spider)