美文网首页爬虫专项
爬虫之爬取猫眼电影专业版实时数据排行榜

爬虫之爬取猫眼电影专业版实时数据排行榜

作者: 潇洒风 | 来源:发表于2017-08-14 12:42 被阅读82次

    猫眼电影专业版实时数据排行榜是个持续更新的用ajax写成的网站,一般而言,爬取它比较麻烦,需要使用ajax/js进行爬取,python中的requests库可以获取网站的ajax,再通过json库解析,就可以完成爬取。

    #猫眼电影实时爬取  
    #2017/8/1  
    import os  
    import requests  
    import json  
    import time   
    import csv  
      
    #链接url  
    def get_to_link():  
        try:  
            r = requests.get("https://box.maoyan.com/promovie/api/box/second.json")  
            r.raise_for_status()  
            r.encoding = r.apparent_encoding  
            return r.text  
        except:  
            print("链接错误!!!")  
            return ''  
      
    #json化字符串  
    def json_text(text):  
        jd = json.loads(text)  
        return jd  
      
    #返回实时日期  
    def date_time(jd):  
        ja = jd['data']  
        date = ja['queryDate']#返回日期  
        alltime = ja['updateInfo'].split()[1]#返回时间  
        money = ja['totalBox'] + ja['totalBoxUnit']#返回总票房  
        return date,alltime,money  
      
    #返回影片票房  
    def movie_price(jd):  
        jl = jd['data']['list']  
        for i,jls in enumerate(jl,1):  
            name = jls['movieName']#影片名  
            try:  
                days = jls['releaseInfo'][2]#上映时间  
            except:  
                days = '点映'  
            totalmoney = jls['sumBoxInfo']#影片总票房  
            mainmoney = jls['boxInfo']#综合票房  
            moneyrate = jls['boxRate']#票房占比  
            shownumber = jls['showInfo']#排片场次  
            showrate = jls['showRate']#排片占比  
            people = jls['avgShowView']#场均人次  
            showpeople = jls['avgSeatView']#上座率  
              
            yield i,name,days,totalmoney,mainmoney,moneyrate,shownumber,showrate,people,showpeople  
      
    #创建文件夹  
    def makeasocket(path):  
        if not os.path.exists(path):  
            os.makedirs(path)  
          
    #保存到csv中  
    def save_to_csv(path,date,alltime,moeny,movie_price):  
        with open(path + '猫眼电影专业版实时数据.csv','a') as f:  
            writer = csv.writer(f)  
            writer.writerow(['日期',date,'','时间',alltime,'','总票房',moeny])  
            writer.writerow(['排名','影片名','上映时间(/天)','影片总票房','综合票房(/万)','票房占比(%)','排片场次','排片占比(%)','场均人次','上座率(%)'])  
            for movie in movie_price:  
                writer.writerow([movie[0],movie[1],movie[2],movie[3],movie[4],movie[5],movie[6],movie[7],movie[8],movie[9]])  
      
      
      
    def main():  
        path = 'D:/数据/猫眼电影专业版数据/'  
        makeasocket(path)  
        while True:    
            text = get_to_link()  
            jd = json_text(text)  
            date,alltime,moeny = date_time(jd)  
            print('***'*46)  
            print('{:>10s}:{}{:>10s}:{}{:>10s}:{}'.format('日期',date,'时间',alltime,'总票房',moeny))  
            print('---'*46)  
            print('{:^6s}{:^20s}{:^10s}{:^12s}{:^12s}{:^10s}{:^10s}{:^6s}{:^6s}{:^6s}'.format('排名','影片名','上映时间(/天)','影片总票房(/亿)','综合票房(/万)','票房占比(%)','排片场次','排片占比(%)','场均人次','上座率(%)'))  
            print('---'*46)  
            for movie in movie_price(jd):  
                print('{:^6d}{:^20s}{:^20s}{:^20s}{:^12s}{:^11s}{:^13s}{:^10s}{:^10s}{:^10s}'.format(movie[0],movie[1],movie[2],movie[3],movie[4],movie[5],movie[6],movie[7],movie[8],movie[9]))  
                print('---'*46)  
            save_to_csv(path,date,alltime,moeny,movie_price(jd))  
            time.sleep(3)  
      
    if __name__ == "__main__":  
        main()  
      
      
    Contact GitHub API Training Shop Blog About  
    © 2017 GitHub, Inc. Terms Privacy Security Statu  
    

    github代码参考:https://github.com/zhuxunyu/cinema-/blob/master/%E7%8C%AB%E7%9C%BC%E7%94%B5%E5%BD%B1%E5%AE%9E%E6%97%B6%E7%88%AC%E5%8F%96.py

    相关文章

      网友评论

      • 林挺挺:现在已经没法爬了 第一步就直接是链接错误

      本文标题:爬虫之爬取猫眼电影专业版实时数据排行榜

      本文链接:https://www.haomeiwen.com/subject/prhurxtx.html