豆瓣影评爬虫:cutecharts数据可视化看看大家对八佰的评价如何

2020/8/29 16:37:00

一、前言

近期热播电影《八佰》,‘1937年淞沪会战的最后一役,“八百壮士”奉命坚守上海四行仓库,以少敌多顽强抵抗四天四夜。电影《八佰》由管虎导演,是亚洲首部全片使用IMAX摄影机拍摄的商业电影,将于2020年8月21日全国影院上映。’,豆瓣影评7.7分,今天我们用爬虫的方式,将豆瓣影评中的每位评价的星级爬取下来,最后再用cutecharts数据可视化,来看看这部电影是否值得观看。

二、分析网站

豆瓣影评部分,可以说是最基础的爬虫了,无任何反爬手段,我们需要的数据都在源代码之中,这里我通过xpath语法直接筛选出我们需要的数据内容:也就是下图的星级评分。

三、cutecharts介绍

cutecharts是一个很可爱的 Python 手绘风格可视化神包,和 Matplotlib 、pyecharts 等常见的图表不同,使用这个包可以生成下面这种看起来像手绘的各种图表(如下图),在一些场景下使用效果可能会更好。

cutecharts 的项目结构与 pyecharts 基本保持一致,拥有 pyecharts 的所有核心功能。但是整体更加小巧,代码更加精简。因此,本文选择cutecharts来进行数据的可视化。

三、编写代码

首先,需要我们的目标站点的网址和请求头,没有请求头获取不到数据。

 def __init__(self):

        self.headers = {

            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'

        }

        self.url = 'https://movie.douban.com/subject/26754233/reviews?rating=&start={}'

我这边爬取了一百页的星级评分,用for 循环的方式,生成需要爬取的网址。

    def main(self):

        for i in range(0,100):

            url = self.url.format(int(20*i))

            self.get_comment(url)


接下来,就是通过对网页的请求,并且用xpath进行解析,获取我们需要的数据。

  def get_comment(self,url):

        response = requests.get(url,headers=self.headers)

        time.sleep(random.random())

        res = response.text

        html = etree.HTML(res)

        lists  = html.xpath('//div[@class="review-list  "]//div[@class="main review-item"]')

        for list in lists:

            level = list.xpath('.//header[@class="main-hd"]/span[@class]/@title')

            if level:

                level = level[0]

            else:

                level = '无评分'

            dict = {

                '评分':level

            }

            print(dict)



因为有一部分人是没有给出星级评分的,所以这边会用“无评分”来填充没有评价的部分。之后将这些数据保存到本地(如下图),一共有两千条数据。

到这边,爬虫的任务,我们已经做完了,还是很简单的嘛,下面就用cutecharts将数据可视化出来。

这边我就直接上代码了,只展示绘制饼状图的方法,如果有感兴趣的小伙伴,可以自行去找资料。

from cutecharts.charts import Pie



def pie_base() -> Pie:

    chart = Pie("Pie-基本示例")


    chart.set_options(labels=['推荐','力荐','无评分','还行','较差','很差'])

    chart.add_series(list(data['评分'].value_counts()))

    return chart



pie_base().render()


效果图如下

是不是很可爱?

从这张图里我们可以看出来,大部分人还是比较推荐去看这部电影的,综合豆瓣7.7的影评,可以知道这部电影还是值得我们去观看的。


四、总结

本文通过爬取豆瓣的影评星级,然后用一种可爱的数据可视化包,将结果通过可视化的方式呈现给大家,可以作为cutecharts和爬虫的简单案例给大家作为参考。

大家如果觉得文章写得还可以,点个赞再走吧,如果有想看的关于爬虫方面的案例,都可以私信或评论,可能下一篇文章就是你们想看到的,希望你们有所收获,一起进步。