爬取中國(guó)票房網(wǎng)數(shù)據(jù)并進(jìn)行可視化

image.png

????這里主要是對(duì)年度票房信息進(jìn)行操作,url構(gòu)造、數(shù)據(jù)解析方面都是比較簡(jiǎn)單的了,這里就只是簡(jiǎn)單說(shuō)一下

爬蟲(chóng)

1. 請(qǐng)求網(wǎng)站

request請(qǐng)求網(wǎng)站栗菜,返回源碼信息

def get_Html(url):
    r = requests.get(url, headers=headers)
    r.encoding = r.apparent_encoding
    return r.text

2. 獲取電影數(shù)據(jù)保存至字典

????因?yàn)閿?shù)據(jù)不多,我們就對(duì)頁(yè)面可視的所有數(shù)據(jù)進(jìn)行抓取蹄梢,這里用到了lxml里面的etree解析網(wǎng)頁(yè)疙筹,用xpath獲取對(duì)應(yīng)的數(shù)據(jù)項(xiàng)然后保存,代碼比較簡(jiǎn)單禁炒,過(guò)程數(shù)據(jù)項(xiàng)英文翻譯過(guò)來(lái)就懂了而咆,就不做太多注釋了

def get_Info(text):
    info = {}
    info['movie_name'] = []
    info['movie_type'] = []
    info['movie_type'] = []
    info['total'] = []
    info['price_average'] = []
    info['session_average'] = []
    info['origin'] = []
    info['time'] = []
    tree = etree.HTML(text)
    movies = tree.xpath('//table[@id="tbContent"]//tr')[1:]
    for movie in movies:
        movie_name = movie.xpath('./td[1]/a/p/text()')[0]
        if movie.xpath('./td[2]/text()'):
            movie_type = movie.xpath('./td[2]/text()')[0]
        total = movie.xpath('./td[3]/text()')[0]
        price_average = movie.xpath('./td[4]/text()')[0]
        session_average = movie.xpath('./td[5]/text()')[0]
        if movie.xpath('./td[6]/text()'):
            origin = movie.xpath('./td[6]/text()')[0]
        if movie.xpath('./td[7]/text()'):
            time = movie.xpath('./td[7]/text()')[0]
        else:
            time = ""
        # print(movie_name+' movie_type:'+movie_type+' total:'+total+' person_average:'+price_average+' session_average:'+session_average+' origin:'+origin+' time:'+time)
        info['movie_name'].append(movie_name)
        info['movie_type'].append(movie_type)
        info['total'].append(total)
        info['price_average'].append(price_average)
        info['session_average'].append(session_average)
        info['origin'].append(origin)
        info['time'].append(time)
    return info

3. url構(gòu)造,獲取2008-2019所有榜上的電影信息

urls = ["http://www.cbooo.cn/year?year={}".format(year) for year in range(2008, 2020)]

4. 保存至csv

????用到pandas庫(kù)幕袱,先將字典轉(zhuǎn)成DataFrame暴备,然后直接寫(xiě)入csv即可,可參考我之前的可視化相關(guān)的內(nèi)容.(這里為了顯示中文可以在編碼方面稍做處理)

def write2csv(dict, year):
    if year == '2008':
        df = pd.DataFrame(data=dict, index=None)
        df.to_csv('box_office.csv', index=False, encoding='gbk', mode='a')
    else:
        df = pd.DataFrame(data=dict, index=None)
        df.to_csv('box_office.csv', index=False, header=False, encoding='gbk', mode='a')

5. csv文件

image.png

可視化

1. 各類型電影總票房數(shù)(柱狀圖)

def draw_bar(filename):
    data = pd.read_csv(filename, encoding='gbk')
    total = data.groupby(data['movie_type'])['total'].sum()
    total.plot(kind='bar')
    plt.legend()

    # 添加網(wǎng)格
    plt.grid(linestyle='--', alpha=0.5)

    plt.xlabel("電影類別")
    plt.ylabel("總票房數(shù)量")
    plt.title("各類型電影總票房數(shù)")

    plt.show()
image.png

3. 總票房和平均票價(jià)的關(guān)系(散點(diǎn)圖)

def draw_scatter(filename):
    data = pd.read_csv(filename, encoding='gbk')
    plt.title('總票房和平均票價(jià)的關(guān)系')
    plt.xlabel('平均票價(jià)')
    plt.ylabel('總票房(萬(wàn))')
    plt.scatter(data.price_average, data.total, color='b', linestyle='--', label='上海')
    plt.show()

image.png

3. 劇情類型電影前五票房曲線(折線圖)

def draw_plot(filename):
    data = pd.read_csv(filename, encoding='gbk')
    total = data.query('movie_type == "劇情"').head(5).groupby('movie_name')['total'].sum()

    total.plot()
    plt.legend()

    # 添加網(wǎng)格
    plt.grid(linestyle='--', alpha=0.5)

    plt.xlabel("電影")
    plt.ylabel("總票房數(shù)量")
    plt.title("劇情類型電影前五票房曲線")

    plt.show()
image.png

4. 電影票房前五的類型分布(餅圖)

def draw_pie(filename):
    data = pd.read_csv(filename, encoding='gbk')
    total = data.groupby(data['movie_type'], ).size().sort_values(ascending=False).head(5)
    print(total)
    print(total.index)
    plt.title("電影票房前五的類型分布")
    plt.pie(total, autopct='%.2f%%', labels=total.index)
    plt.axis('equal')
    plt.legend()
    plt.show()
image.png

5. 中文處理

plt.rcParams['font.sans-serif'] = ['Simhei']
  • 更多爬蟲(chóng)代碼詳情查看Github
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末们豌,一起剝皮案震驚了整個(gè)濱河市涯捻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玛痊,老刑警劉巖汰瘫,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狂打,死亡現(xiàn)場(chǎng)離奇詭異擂煞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)趴乡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)对省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人晾捏,你說(shuō)我怎么就攤上這事蒿涎。” “怎么了惦辛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵劳秋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我胖齐,道長(zhǎng)玻淑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任呀伙,我火速辦了婚禮补履,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剿另。我一直安慰自己箫锤,他們只是感情好贬蛙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著谚攒,像睡著了一般阳准。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上馏臭,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天溺职,我揣著相機(jī)與錄音,去河邊找鬼位喂。 笑死浪耘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的塑崖。 我是一名探鬼主播七冲,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼规婆!你這毒婦竟也來(lái)了澜躺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抒蚜,失蹤者是張志新(化名)和其女友劉穎掘鄙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嗡髓,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡操漠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饿这。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浊伙。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖长捧,靈堂內(nèi)的尸體忽然破棺而出嚣鄙,到底是詐尸還是另有隱情,我是刑警寧澤串结,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布哑子,位于F島的核電站,受9級(jí)特大地震影響肌割,放射性物質(zhì)發(fā)生泄漏卧蜓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一声功、第九天 我趴在偏房一處隱蔽的房頂上張望烦却。 院中可真熱鬧,春花似錦先巴、人聲如沸其爵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)摩渺。三九已至简烤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摇幻,已是汗流浹背横侦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绰姻,地道東北人报辱。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓畸颅,卻偏偏與公主長(zhǎng)得像舰罚,于是被迫代替她去往敵國(guó)和親束世。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容