乐趣区

关于python:2022春节贺岁档电影开分水门桥不理想四海崩了用Python一探究竟

只管受到疫情影响,局部地区被迫敞开了电影院,但从大年初一中国影史第二单日总票房的数据来看,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 获取~

退出移动版