2022春節賀歲檔電影開分,水門橋不理想,四海崩了!用Python一探究竟

Python小二發表於2022-02-02

儘管受到疫情影響,部分地區被迫關閉了電影院,但從大年初一中國影史第二單日總票房的資料來看,2022 年春節期間大家的觀影熱情還是十分高漲的。

大年初一上映當天,從票房資料來看,《長津湖之水門橋》一馬當先,《四海》《這個殺手不太冷靜》《奇蹟·笨小孩》你追我趕,動畫片《熊出沒》表現強勢,《狙擊手》令人遺憾。

目前,幾部真人電影豆瓣已經開分了。

本文我們用 Python 爬取這幾部豆瓣開分的電影評論,爬取的具體分析過程這裡就不說了,不瞭解的可以參考一下:豆瓣影評爬取參考,主要實現程式碼如下:

def spider():
    url = 'https://accounts.douban.com/j/mobile/login/basic'
    headers = {"User-Agent": 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'}
    # 龍嶺迷窟網址,為了動態翻頁,start 後加了格式化數字,短評頁面有 20 條資料,每頁增加 20 條
    url_comment = 'https://movie.douban.com/subject/35215390/comments?start=%d&limit=20&sort=new_score&status=P'
    data = {
        'ck': '',
        'name': '使用者名稱',
        'password': '密碼',
        'remember': 'false',
        'ticket': ''
    }
    session = requests.session()
    session.post(url=url, headers=headers, data=data)
    # 初始化 4 個 list 分別存使用者名稱、評星、時間、評論文字
    users = []
    stars = []
    times = []
    content = []
    # 抓取 500 條,每頁 20 條,這也是豆瓣給的上限
    for i in range(0, 500, 20):
        # 獲取 HTML
        data = session.get(url_comment % i, headers=headers)
        # 狀態碼 200 表是成功
        print('第', i, '頁', '狀態碼:',data.status_code)
        # 暫停 0-1 秒時間,防止IP被封
        time.sleep(random.random())
        # 解析 HTML
        selector = etree.HTML(data.text)
        # 用 xpath 獲取單頁所有評論
        comments = selector.xpath('//div[@class="comment"]')
        # 遍歷所有評論,獲取詳細資訊
        for comment in comments:
            # 獲取使用者名稱
            user = comment.xpath('.//h3/span[2]/a/text()')[0]
            # 獲取評星
            star = comment.xpath('.//h3/span[2]/span[2]/@class')[0][7:8]
            # 獲取時間
            date_time = comment.xpath('.//h3/span[2]/span[3]/@title')
            # 有的時間為空,需要判斷下
            if len(date_time) != 0:
                date_time = date_time[0]
                date_time = date_time[:10]
            else:
                date_time = None
            # 獲取評論文字
            comment_text = comment.xpath('.//p/span/text()')[0].strip()
            # 新增所有資訊到列表
            users.append(user)
            stars.append(star)
            times.append(date_time)
            content.append(comment_text)
    # 用字典包裝
    comment_dic = {'user': users, 'star': stars, 'time': times, 'comments': content}
    # 轉換成 DataFrame 格式
    comment_df = pd.DataFrame(comment_dic)
    # 儲存資料
    comment_df.to_csv('data.csv')

有了評論資料,我們再通過詞雲直觀的感受一下,主要程式碼實現如下:

df = pd.read_csv("comment.csv", index_col = 0)
cts_list = df['comments'].values.tolist()
cts_str ="".join([str(i).replace('\n', '').replace(' ', '') for i in cts_list])
stop_words = []
with open('stop_words.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    for line in lines:
        stop_words.append(line.strip())
# jieba 分詞
word_list = jieba.cut(cts_str)
words = []
for word in word_list:
    if word not in stop_words:
        words.append(word)
cts_str = ','.join(words)
print(cts_str)
stylecloud.gen_stylecloud(text=cts_str, max_words=300,
                          collocations=False,
                          font_path="SIMLI.TTF",
                          icon_name="fas fa-arrow-circle-right",
                          size=800,
                          output_name="comment.png")
Image(filename="comment.png")

首先我們來看《四海》,《四海》的口碑為什麼沒有縱橫四海?看看觀眾怎麼說的:

接著看《這個殺手不太冷靜》,作為一部喜劇片,豆瓣這個評分還算可以,看看觀眾怎麼說的:

再接著看《長津湖之水門橋》,目前評分是低於第一部的,看看觀眾怎麼說的:

再接著看《奇蹟·笨小孩》,評分和票房都算是中規中矩,看看觀眾怎麼說的:

再接著看《狙擊手》,國師父女指導,票房不佳,評分暫列第一,看看觀眾怎麼說的:

原始碼在公眾號Python小二後臺回覆m2022獲取~

相關文章