获取电影影评+数据可视化 | Python+requests+re+WordCloud

目录

一、环境与说明

1.1、环境

1.2、说明

二、完整代码

2.1、完整源代码如下

三、结果

3.1、结果图片

3.2、保存的文件内容结果


一、环境与说明

1.1、环境

操作系统:win10 家庭版

编辑器:pycharm edu

版本:python 3.10

使用的库:requests、re、numpy、Image、WordCloud、

思路:使用requests模块发送请求,re模块进行解析页面源代码并提取,numpy模块进行绘制数据可视化,Image进行数据转换、WordCloud进行词云的绘制。

1.2、说明

本次要获取的是内容db电影top250的:黑客帝国2评论(至少100条)

数据可视化是:词云图

数据保存的位置是:当前.py文件同一目录下

要生成词云的图片位置是:当前.py文件同一目录下

小提示:生成的词云图图片可以任意进行改变

使用的url不会是真实的,移植测试注意识别并更改。

二、完整代码

2.1、完整源代码如下

import requests
import re
import jieba
import numpy
import PIL.Image as Image
from wordcloud import WordCloud
from bs4 import BeautifulSoup



class GetDiscuss:
    def __init__(self, text_one, text_two, headers):
        print(text_one)
        self.t_two = text_two
        self.headers = headers

    # 第一个请求,要拿到跳转到具体电影的页面url
    def one_requests(self):
        global one_tru
        one_tru = []  # 保存全部分页url

        one_url = "这里的代码应该是排行top250的url"  # 拿到第一个界面的url
        one_rep = requests.get(one_url, headers=self.headers)  # 发起请求
        one_text = one_rep.text  # 第一个页面源代码
        one_rep.encoding = 'utf-8'  # utf-8方式编码第一个页面的源代码

        one_result = BeautifulSoup(one_text, "html.parser")
        one_div = one_result.find("div", class_="paginator").find_all("a")
        global tru
        tru = []  # 保存全部分页url
        for i in one_div:
            once_href = i.get("href")
            urls = "排行top250的url" + once_href
            tru.append(urls)  # 每一个分页都存入
        # print(tru)

    # 第二次请求,进入具体电影页面,并且进入影评界面
    def two_requests(self):
        global three_tru
        global f_hrefs
        global f_href
        three_tru = []

        two_tru = tru
        # print(two_tru)
        two_rep = requests.get(two_tru[8], headers=self.headers)  # 发起请求
        two_text = two_rep.text  # 第一个页面源代码
        two_rep.encoding = 'utf-8'  # utf-8方式编码页面的源代码
        # 正则提取url,re.S规则是使.可以匹配空格
        two_obj = re.compile(f'<em class="">228</em>.*?<div class="hd">.*?<a href="(?P<two_href>.*?)" class="">', re.S)
        two_result = two_obj.finditer(two_text)
        for i in two_result:
            t_href = i.group("two_href")
            # print(t_href)  # 输出测试获取的链接是否是我们要的

            # 第三次发起请求,进入完整的影评界面
            three_rep = requests.get(t_href, headers=self.headers)  # 发起请求
            three_text = three_rep.text  # 页面源代码

            three_rep.encoding = 'utf-8'  # utf-8方式编码页面的源代码
            three_obj = re.compile(f'&gt; <a href="(?P<three_href>.*?)" >', re.S)
            three_result = three_obj.finditer(three_text)
            for j in three_result:
                f_href = j.group("three_href")
                # print(f_href)  # 输出测试获取的链接是否是我们要的 comments?sort=new_score&status=P
                f_hrefs = "https://movie.douban.com/subject/1304141/" + f_href
            # print(f_hrefs)  

    # 实际上是发起的第四次请求,分别拿到5页的评论,要拿更多需要更改上面的x元组
    def three_requests(self):
        global f_all_hrefs
        global f_hrefs
        f_all_href = f_hrefs.strip("?")[:-23]  # 通过观察得出需要拼接部分的url,进行截取
        # 拼接评论完整url
        f_all_hrefs = f_all_href + "start={}&limit=20&status=P&sort=new_score"

        x = [20, 40, 60, 80, 100, 120]
        for k in range(0, 1):
            f_all_url = f_all_hrefs.format(x[k])
            # print(f_all_url)
            four_rep = requests.get(f_all_url, headers=self.headers)  # 发起请求
            four_text = four_rep.text  # 第一个页面源代码
            print('4', four_rep.status_code)
            # print(four_text)
            four_rep.encoding = 'utf-8'  # utf-8方式编码第一个页面的源代码
            four_obj = re.compile(f'<span class="short">(?P<pape_dis>.*?)</span>', re.S)
            four_result = four_obj.finditer(four_text)
            for p in four_result:
                ones_dis = p.group("pape_dis")
                with open("all_dis.txt", mode="a", encoding='utf-8') as file:
                    file.write(ones_dis)
        print(self.t_two)


def word_cloud():
    with open("all_dis.txt", encoding='utf-8', mode='r') as f:
        text1 = f.read()
        text2 = jieba.cut(text1)
        wordsDict = {}
        for word in text2:
            if len(word) == 1:
                continue
            elif word.isdigit() == True:
                continue
            elif word in wordsDict:
                wordsDict[word] += 1
            else:
                wordsDict[word] = 1
        wordsDict_seq = sorted(wordsDict.items(), key=lambda x:x[1], reverse=True)  # 按字典的值降序排序
        print(wordsDict_seq[:20])
        mask_pic = numpy.array(Image.open("one.jpg"))
        text3 = " ".join(jieba.cut(text1))
        image = WordCloud(font_path="msyh.ttc", mask=mask_pic).generate(text3)
        image = image.to_image()
        image.show()


if __name__ == '__main__':
    header = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0",

    }
    one_pr = "开始爬取"
    two_pr = "爬取结束"

    global f_hrefs
    global f_href
    global tru
    global one_tru
    global three_tru
    global f_all_hrefs

    example = GetDiscuss(one_pr, two_pr, header)
    example.one_requests()
    example.two_requests()
    example.three_requests()
    word_cloud()

三、结果

3.1、结果图片

78531eb0fcaf47978a3ce7063425f478.png

3.2、保存的文件内容结果

6dbf916e572e4af8bf02823d3bd120e0.png

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 豆瓣电影是众所周知的一个知名电影评分网站,其中的TOP250电影榜单更是备受关注。爬取这个榜单的数据可以帮助我们更好地了解电影市场和评价,数据可视化方面可以更好地呈现这些数据。 首先,我们可以使用Python程序编写爬虫,抓取豆瓣电影TOP250的数据。我们可以通过分析网页源代码,选取需要的信息,例如电影名称、上映时间、豆瓣评分、评分人数、电影类型、导演、演员等信息。然后,将所有信息保存在CSV文件中。我们可以使用BeautifulSoup模块或Scrapy框架来实现爬虫程序的编写。 接下来,我们可以使用Python数据可视化工具来对这些数据进行可视化处理。例如,我们可以使用matplotlib或Seaborn绘制电影评分的统计图表和线型图,了解每部电影评分的分布情况、评分人数的多寡、豆瓣评分的走向等。另外,我们也可以绘制散点图或热图,从电影类型、上映时间等角度分析不同类型电影的评分情况。我们还可以利用词云图工具呈现电影的标签云图,更直观地展示豆瓣用户对电影的评价。 总的来说,我们可以使用Python爬虫数据可视化工具来爬取豆瓣电影TOP250榜单的数据,并且将数据以图表、统计、云图等形式进行可视化分析,从而更好地了解电影市场和评价。 ### 回答2: 豆瓣电影Top250是电影爱好者们都很熟悉的一个电影排行榜。为了更好地了解这个排行榜的情况,我们可以利用Python爬取豆瓣电影Top250上的电影信息,并将数据制作成可视化图表,以更直观地呈现数据。 首先,我们需要使用Python爬虫技术获取豆瓣电影Top250中每部电影的信息。一般来说,爬取网页数据需要用到一些第三方爬虫库,比如Requests和BeautifulSoup。使用Requests库可以向豆瓣服务器发送请求,获取Top250的网页HTML文件。接着,我们可以使用BeautifulSoup库解析HTML文件,从中获取每一部电影的名称、评分、演员、导演、简介等信息。爬取完毕后,将获取到的数据存储在MySQL或者MongoDB数据库中,方便后续对数据的处理和分析。 接下来,我们需要将获取到的数据进行数据可视化。我们可以使用Python中的Matplotlib或者Seaborn等数据可视化库来制作可视化图表。比如,我们可以生成柱状图、饼图、折线图等多种图表类型,展现Top250中电影各类别的数量分布、电影评分的分布情况、导演、演员等数据的贡献度等信息。 总之,通过Python爬取豆瓣电影Top250数据,并利用数据可视化技术制作图表,我们可以更好地了解电影市场的情况,从中找到一些有用的数据洞察点,对后续的电影市场分析等工作提供有力支持。 ### 回答3: 随着互联网的普及和数据挖掘的发展,数据可视化已经成为当今最流行的技术之一。而Python语言的出现,极大地促进了数据可视化技术的发展,并且能够使数据可视化更加高效、便捷。 Python爬取豆瓣电影Top250数据可以使用爬虫框架Scrapy,通过对网页的解析和内容抓取,将所需数据存入数据集中。数据集中存储了每个电影的名称、导演、主演、类型、上映时间、评价人数、评分等信息,这些数据可以通过Python数据可视化工具如Matplotlib、Pandas等进行可视化处理。 通过数据可视化可以得到丰富的数据分析和呈现,如: 1.不同类型电影的数量 通过Python可视化工具可以得到不同类型电影的数量,并且可以使用饼图、柱状图等图表进行图像展示,帮助人们更好地了解豆瓣Top250电影中各类型的分布情况。 2.电影排名及评价情况 通过Python爬虫框架获取的豆瓣Top250电影可以进行排名展示及评价等数据的分析。可视化工具可以帮助我们通过散点图、折线图等形式直观地了解电影排名及评价情况。 3.电影时长对评分的影响 通过Python可视化工具可视化处理电影时长对评分的影响。可以得出电影时长对于电影评分存在明显影响的结论,以饼图的形式将主观评价高的电影电影时长进行对比。 Python爬取豆瓣电影Top250,通过数据可视化工具可以使我们直观地了解到豆瓣Top250电影的分类情况、排名和评价等数据信息,同时,也可以了解到电影时长等因素对电影评价的影响,这对我们对电影的分析与推荐可以起到积极的作用,有助于我们更好地了解电影行业的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值