花瓣网爬虫

Zss 发表于:

写了一个简单的花瓣网的爬虫,挺喜欢这个网站了,有很多漂亮的插画和icon设计,下载的这个图片也可以作为robot机器人的一些小资源来发送给微信的好友

其中值得注意的是在创建中文的文件夹时,编码很重要,可以使用,没有使用到多线程来下载,请求太过于频繁会到至封ip

import sys

reload(sys)
sys.setdefaultencoding(‘gbk’)

发现其中pin_id 只要是一个十位的数字就可以生成不同的图片,所以就随机的构造了一个数字来作为参数传入,方便每次的图片不一样,也没有专门再去爬取哪个专题里面的

当发生错误后,重新生成一个pin-id再次下载

#coding:gbk
import requests,os,sys,random
import json
reload(sys)
sys.setdefaultencoding('gbk')

headers = {
    'Accept':'application/json',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36',
    'X-Request':'JSON',
    'X-Requested-With':'XMLHttpRequest'
}


def get_json_id_down_p(url,pin_id,headers):
    json_id=[]
    params = {'j4jgr2xu':'',
        'max':pin_id,
        'limit':'20',
        'wfl':'1'}
    rsp= requests.get(url,params=params,headers=headers)
    rsp_json = json.loads(rsp.text)
    for i in rsp_json['pins']:
        p_url = 'http://img.hb.aicdn.com/{}_fw658'.format(str(i['file']['key']))
        print(p_url)
        rsp = requests.get(p_url).content
        path = i['file']['key']
        with open('e:\花瓣网\{}.jpg'.format(str(path[-12:])),'wb') as file:
            file.write(rsp)
        json_id.append(i['pin_id'])
    return json_id

if __name__ == '__main__':
    if not os.path.exists('e:\花瓣网'):
        os.makedirs('e:\花瓣网')
    while 1:
        try:
            pin_id = '1'
            for i in range(9):
                pin_id = pin_id + str(random.randint(0,10))
            print(pin_id)
            url = 'http://huaban.com/explore/meishichahua'
            while 1:
                p_id = get_json_id_down_p(url,pin_id,headers)
                url = 'http://huaban.com/favorite/illustration/?fetch&j5ht4pfr&since={}&limit=100&wfl=1'.format(str(p_id[19]))
                pin_id = p_id[19]
        except:pass