首页 > 编程语言 >Python爬取豆瓣电影Top250 + 数据可视化

Python爬取豆瓣电影Top250 + 数据可视化

时间:2023-05-30 21:35:27浏览次数:55  
标签:title Python 上映 data 爬取 import counts Top250 opts

我的这篇博客的一些代码解释python大作业电影演员数据分析

1. 爬取数据

1.1 导入以下模块

import os
import re
import time
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
from openpyxl import Workbook, load_workbook

1.2 获取每页电影链接

def getonepagelist(url,headers):
    try:
        r = requests.get(url, headers=headers, timeout=10)
        r.raise_for_status()
        r.encoding = 'utf-8'
        soup = BeautifulSoup(r.text, 'html.parser')
        lsts = soup.find_all(attrs={'class': 'hd'})
        for lst in lsts:
            href = lst.a['href']
            time.sleep(0.5)
            getfilminfo(href, headers)
    except:
        print('getonepagelist error!')

1.3 获取每部电影具体信息

def getfilminfo(url,headers):
    filminfo = []
    r = requests.get(url, headers=headers, timeout=10)
    r.raise_for_status()
    r.encoding = 'utf-8'
    soup = BeautifulSoup(r.text, 'html.parser')

1.4 保存数据

def insert2excel(filepath,allinfo):
    try:
        if not os.path.exists(filepath):
            tableTitle = ['片名','上映年份','评分','评价人数','导演','编剧','主演','类型','国家/地区','语言','时长(分钟)']
            wb = Workbook()
            ws = wb.active
            ws.title = 'sheet1'
            ws.append(tableTitle)
            wb.save(filepath)
            time.sleep(3)
        wb = load_workbook(filepath)
        ws = wb.active
        ws.title = 'sheet1'
        ws.append(allinfo)
        wb.save(filepath)
        return True
    except:
        return False

2. 数据可视化

2.1 导入以下模块

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar

2.2 用pandas模块读取数据

data = pd.read_excel('/home/mw/input/TOP2508837/TOP250.xlsx')
data.head(10)

2.3 各年份上映电影数量柱状图(纵向)

def getzoombar(data):
    year_counts = data['上映年份'].value_counts()
    year_counts.columns = ['上映年份', '数量']
    year_counts = year_counts.sort_index()
    c = (
        Bar()
        .add_xaxis(list(year_counts.index))
        .add_yaxis('上映数量', year_counts.values.tolist())
        .set_global_opts(
            title_opts=opts.TitleOpts(title='各年份上映电影数量'),
            yaxis_opts=opts.AxisOpts(name='上映数量'),
            xaxis_opts=opts.AxisOpts(name='上映年份'),
            datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_='inside')],)
        )

2.4 各地区上映电影数量前十柱状图(横向)

def getcountrybar(data):
    country_counts = data['国家/地区'].value_counts()
    country_counts.columns = ['国家/地区', '数量']
    country_counts = country_counts.sort_values(ascending=True)
    c = (
        Bar()
        .add_xaxis(list(country_counts.index)[-10:])
        .add_yaxis('地区上映数量', country_counts.values.tolist()[-10:])
        .reversal_axis()
        .set_global_opts(
        title_opts=opts.TitleOpts(title='地区上映电影数量'),
        yaxis_opts=opts.AxisOpts(name='国家/地区'),
        xaxis_opts=opts.AxisOpts(name='上映数量'),
        )
        .set_series_opts(label_opts=opts.LabelOpts(position="right"))
        )

2.5 电影评价人数前二十柱状图(横向)

def getscorebar(data):
    df = data.sort_values(by='评价人数', ascending=True)
    c = (
        Bar()
        .add_xaxis(df['片名'].values.tolist()[-20:])
        .add_yaxis('评价人数', df['评价人数'].values.tolist()[-20:])
        .reversal_axis()
        .set_global_opts(
            title_opts=opts.TitleOpts(title='电影评价人数'),
            yaxis_opts=opts.AxisOpts(name='片名'),
            xaxis_opts=opts.AxisOpts(name='人数'),
            datazoom_opts=opts.DataZoomOpts(type_='inside'),
            )
        .set_series_opts(label_opts=opts.LabelOpts(position="right"))
        )

本文摘至“当打之年”

标签:title,Python,上映,data,爬取,import,counts,Top250,opts
From: https://www.cnblogs.com/yzx-sir/p/17444490.html

相关文章

  • 【python教程】map、多进程与进度条
    转载:【python教程】map、多进程与进度条-知乎(zhihu.com)今天讲讲我在实习中学到的一点python知识,核心内容是多进程,也即我们常说的并行计算。map首先提个问题,给出一个列表,对列表中的每个元素都平方,代码怎么写?最简单直观的方法自然就是for循环。alist=[1,2,3,4,5,6,......
  • 万年历python
    importtkinterastkimporttkinter.ttkasttkimportdatetimeimportcalendartoday_date=datetime.date.today()today_date_year=int(today_date.year)today_date_month=int(today_date.month)today_date_week=today_date.isocalendar()date_num_list......
  • 【python】with as语句
    读文件读写文件是最常见的IO操作。python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操......
  • python基础 14
    装饰器的简易版本核心思想: 在不改变被装饰对象内部代码和原有调用方式的基础之上在添加额外的功能#给被装饰对象添加额外的功能给index函数添加统计执行时间的功能defindex():time.sleep(3)index()importtimedefindex():time.sleep(3)p......
  • Python连接es笔记三之es更新操作
    本文首发于公众号:Hunter后端原文链接:Python连接es笔记三之es更新操作这一篇笔记介绍如何使用Python对数据进行更新操作。对于es的更新的操作,不用到Search()方法,而是直接使用es的连接加上相应的函数来操作,本篇笔记目录如下:获取连接update()update_by_query()批量......
  • Python 执行Javascript脚本
    一、安装第三方库pipinstallPyExecJS二、创建一个js文件//test.jsfunctionadd(a,b){returna+b}三、创建一个python文件#testJs.pyimportexecjsctx=execjs.compile(open('./test.js','r',encoding='utf-8').read())print(ctx.call('add&#......
  • python day6
    第一阶段第六章6.1数据容器 6.2列表列表中元素类型不限,可以混合 ["itheima",888,True]1#列表里面嵌套列表2my_list=[[1,2,3],[4,5,6]]3print(my_list)4print(type(my_list))6.3列表遍历下标定义可以反向 #列表里面嵌套列表取数据my_......
  • Python变量基础知识
    Python变量基础知识-Python专栏-万象专栏(wanxiangsucai.com) 举例:第一种:myName  myFriendName第二种:MyName  MyFriendName第二种:my_name  my_friend_name......
  • python split space
    发现自己写python的空格split还挺多坎的,尤其是最后一个是空格的情形:defsplit(s):i=0ans=[]whilei<len(s):start=i#findspacewhilei<len(s)ands[i]!='':i+=1ans.append(s[start:i])......
  • python中如何使用正则表达式查询字符串
    '''Createdon2019年12月2日@author:hp''''''上一篇文章介绍了那么多关于正则表达式的用法,现在终于到了python中如何使用正则表达式了,不急,请诸君慢慢来''''''之前在讲字符串时,已经说过了字符串的格式化输出,大家没看的可以看我的上一篇文章格式化输出时,是含有模式串......