Python爬取猫眼电影数据并对其进行数据可视化

前言

如果大家经常阅读Python爬虫相关的公众号,都会是以爬虫+数据分析的形式展现的,这样很有趣,图表也很不错,今天了,我就来分享上一次在培训中的一个作品:猫眼电影爬虫及分析。

爬虫分析

这里是获取的是top100的电影数据,进行了跨页爬虫,获取的字段:电影名,主演,上映时间,评分,电影类型和时长。最后保存在csv文件中。

爬虫代码

import requests
from lxml import etree
import csv

'''
遇到不懂的问题?Python学习交流群:1136201545满足你的需求,资料都已经上传群文件,可以自行下载!
'''
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}

def get_url(url):
    res = requests.get(url,headers=headers)
    html = etree.HTML(res.text)
    infos = html.xpath('//dl[@class="board-wrapper"]/dd')
    for info in infos:
        name = info.xpath('div/div/div[1]/p[1]/a/text()')[0]
        info_url = 'http://maoyan.com' + info.xpath('div/div/div[1]/p[1]/a/@href')[0]
        star = info.xpath('div/div/div[1]/p[2]/text()')[0].strip()
        release_time = info.xpath('div/div/div[1]/p[3]/text()')[0].strip()
        score_1 = info.xpath('div/div/div[2]/p/i[1]/text()')[0]
        score_2 = info.xpath('div/div/div[2]/p/i[2]/text()')[0]
        score = score_1 + score_2
        # print(name,star,release_time,score,info_url)
        get_info(info_url,name,star,release_time,score)

def get_info(url,name,star,time,score):
    res = requests.get(url, headers=headers)
    html = etree.HTML(res.text)
    style = html.xpath('/html/body/div[3]/div/div[2]/div[1]/ul/li[1]/text()')[0]
    long_time = html.xpath('/html/body/div[3]/div/div[2]/div[1]/ul/li[2]/text()')[0].split('/')[1].strip()
    print(name,star,time,score,style,long_time)
    writer.writerow([name,star,time,score,style,long_time])

if __name__ == '__main__':
    fp = open('maoyan_2.csv','w',encoding='utf-8',newline='')
    writer = csv.writer(fp)
    writer.writerow(['name','star','time','score','style','long_time'])
    urls = ['http://maoyan.com/board/4?offset={}'.format(str(i)) for i in range(0, 100, 10)]
    for url in urls:
        get_url(url)

在这里插入图片描述

数据分析

总体情况

100部电影,平均得分9.0,平均电影时长128.63。
在这里插入图片描述

电影年份趋势

电影年份趋势不大,规律不太明显。
在这里插入图片描述

电影月份

大家看电影都知道,电影基本在假期上映更有热度,这里统计出来,发现下半年的电影比上半年电影好很多~
在这里插入图片描述

地区

中国和美国还是占了很多的,韩国和日本电影也很不错~
在这里插入图片描述

电影类型

电影大部分都是剧情的,爱情才是真谛啊。

在这里插入图片描述

这个项目的大致流程如下: 1. 使用 Python 的 requests 和 Beautiful Soup 库爬取猫眼电影网站的电影信息,包括电影名称、评分、评论人数、上映时间等等。可以使用多线程或异步加速爬取过程。 2. 将爬取到的电影信息存储到 MySQL 数据库中,可以使用 Python 的 pymysql 库进行数据库的连接和操作。 3. 使用 Flask 框架编写 Web 应用程序,提供数据查询和展示功能。可以使用 Flask 的模板引擎 Jinja2 来渲染页面。 4. 使用 PyChart 库对电影数据进行可视化分析,生成各种图表,如柱状图、折线图、饼图等等,以展示电影数据的特征和规律。 具体实现步骤如下: 1. 爬取猫眼电影网站的电影信息 使用 requests 和 Beautiful Soup 库爬取猫眼电影网站的电影信息。可以先通过浏览器查看网页的源代码,找到电影信息的 HTML 标签和属性,再通过 Beautiful Soup 解析并提取出需要的信息。例如,可以使用以下代码爬取电影名称和评分: ```python import requests from bs4 import BeautifulSoup url = 'https://maoyan.com/films' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') movies = soup.find_all('div', class_='movie-item-hover') for movie in movies: name = movie.find('span', class_='name').text score = movie.find('span', class_='score').text print(name, score) ``` 2. 将电影信息存储到 MySQL 数据库中 使用 pymysql 库连接 MySQL 数据库,并将爬取到的电影信息存储到数据库中。可以先创建一个 movies 表来存储电影信息,包括电影名称、评分、评论人数、上映时间等字段。例如,可以使用以下代码将电影信息存储到数据库中: ```python import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', port=3306, user='root', password='123456', database='test', charset='utf8mb4' ) # 创建 movies 表 cursor = conn.cursor() create_table_sql = ''' CREATE TABLE IF NOT EXISTS movies ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, score FLOAT NOT NULL, comments INT NOT NULL, release_date DATE NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ''' cursor.execute(create_table_sql) # 将电影信息插入数据库 for movie in movies: name = movie.find('span', class_='name').text score = float(movie.find('span', class_='score').text) comments = int(movie.find('div', class_='movie-item-number').find_all('span')[2].text[:-3]) release_date = movie.find_all('div', class_='movie-hover-title')[1].text.split(':')[1] insert_sql = f''' INSERT INTO movies (name, score, comments, release_date) VALUES ('{name}', {score}, {comments}, '{release_date}') ''' cursor.execute(insert_sql) conn.commit() # 关闭连接 cursor.close() conn.close() ``` 3. 使用 Flask 编写 Web 应用程序 使用 Flask 框架编写 Web 应用程序,提供数据查询和展示功能。可以使用 Flask 的模板引擎 Jinja2 来渲染页面。例如,可以先创建一个 index.html 模板文件来展示电影数据: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>猫眼电影数据分析</title> </head> <body> <h1>猫眼电影数据分析</h1> <table> <tr> <th>电影名称</th> <th>评分</th> <th>评论人数</th> <th>上映时间</th> </tr> {% for movie in movies %} <tr> <td>{{ movie.name }}</td> <td>{{ movie.score }}</td> <td>{{ movie.comments }}</td> <td>{{ movie.release_date }}</td> </tr> {% endfor %} </table> </body> </html> ``` 然后,在 Flask 应用程序中定义一个路由,从数据库中获取电影数据,并渲染模板文件: ```python from flask import Flask, render_template import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', port=3306, user='root', password='123456', database='test', charset='utf8mb4' ) # 创建 Flask 应用程序 app = Flask(__name__) # 定义路由,获取电影数据并渲染模板文件 @app.route('/') def index(): cursor = conn.cursor(pymysql.cursors.DictCursor) select_sql = ''' SELECT * FROM movies ''' cursor.execute(select_sql) movies = cursor.fetchall() cursor.close() return render_template('index.html', movies=movies) # 启动应用程序 if __name__ == '__main__': app.run(debug=True) ``` 4. 使用 PyChart 库进行数据可视化分析 使用 PyChart 库对电影数据进行可视化分析,生成各种图表,如柱状图、折线图、饼图等等,以展示电影数据的特征和规律。例如,可以使用以下代码生成一个柱状图,展示电影评分的分布情况: ```python from pychart import * import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', port=3306, user='root', password='123456', database='test', charset='utf8mb4' ) # 查询电影数据 cursor = conn.cursor() select_sql = ''' SELECT score, COUNT(*) AS count FROM movies GROUP BY score ''' cursor.execute(select_sql) data = cursor.fetchall() cursor.close() # 生成柱状图 chart = VerticalBarChart() chart.addDataset([row[1] for row in data]) chart.setLegend([f'{row[0]:.1f} 分' for row in data]) chart.setXAxis({'title': '评分'}) chart.setYAxis({'title': '电影数量'}) chart.setTitle('电影评分分布图') chart.setColors(['blue', 'red', 'green', 'yellow', 'purple']) chart.download('score.png') ``` 以上是一个简单的 Python 爬取猫眼电影+MySQL+Flask+PyChart 数据分析的项目流程,具体实现还需要根据实际需求进行调整和优化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值