bilibili番剧评分爬虫

python选修课学习中练手写的,主要就是查询bilibili提供得api

# -*- coding:utf-8 -*-

import requests
import json
import csv
import sys

#将windows系统默认语言从gbk-2312设置为utf-8
reload(sys)
sys.setdefaultencoding('utf-8')

def rating(bangumi_id):
    payload = {'callback': 'seasonListCallback'}
    response = requests.get('https://bangumi.bilibili.com/jsonp/seasoninfo/{0}.ver'.format(bangumi_id), params=payload)
    data = json.loads(response.text[19:-2])
    try:
        season_id = int(data['result']['season_id'])
        title = '{0}'.format(data['result']['media']['title'])
        score = float(data['result']['media']['rating']['score'])
        count = int(data['result']['media']['rating']['count'])
        is_finish = int(data['result']['is_finish'])  
        try:
            writer.writerow([season_id, title, score, count, is_finish])
        except:
            pass
    except KeyError:
        try:
            season_id = int(data['result']['season_id'])
            title = '{0}'.format(data['result']['title'])
            score=float(0)
            count=int(0)
            is_finish = int(data['result']['is_finish'])
            try:
                writer.writerow([season_id, title, score, count, is_finish])
            except:
                pass
        except:
            return None
        return None
if __name__ == '__main__':
    with open('bangumi.csv', 'wb+') as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        writer.writerow(['序号','名称', '评分(默认0分)', '评分人数(人数不足为0人)', '是否完结(1:表示已完结)'])
        for i in range(7000):
            rating(i)

  整理结果csv https://pan.baidu.com/s/1jHX2fJ4

posted @ 2018-01-05 23:07  ~kagi~  阅读(1196)  评论(1编辑  收藏  举报