爬取豆瓣排名前250的电影并进行可视化分析(python)

1. 项目概述

目标:通过编写Python程序自动抓取豆瓣电影Top 250的数据,之后使用可视化技术对这些数据进行深入分析,最后将分析结果以直观的方式展示出来。

意义

  • 了解当前市场上最受欢迎的电影及其特征。
  • 分析观众对于不同类型电影的喜好趋势。
  • 提供给观众,方便观众了解电影质量并做出观影选择
  • 提供给影视制作方参考,辅助决策。

2.数据收集

目标网站:豆瓣电影 Top 250

注意事项:如个人实现时发现自己写的代码语法错误,请调试至正确后再运行,避免在短时间内大量进行爬取,给服务器带来负担(状态码会变成403,只有状态码等于200时,爬虫才能进行)

检查和网络如下图(检查是左边第一个图标)

import os
import re
import pandas as pd
import requests
from bs4 import BeautifulSoup
import csv

#设置请求头,模拟浏览器行为,避免被服务器拒绝
#网页中右键检查,点击顶上的网络(附图在上方),刷新之后出现的内容随便点击一样,拖动出现变化的页面到最下方就能看见自己的User-Agent
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
}
#初始化数据列表
title=[]
year=[]
score=[]
type=[]
review=[]
director=[]
#循环遍历所有页面
for star_num in range(0,250,25):#总共250部电影,每页25部电影
    response=requests.get(f"https://movie.douban.com/top250?start={star_num}",headers=headers)#f-string,格式化字符串字面量,允许在字符串中嵌入表达式
    if response.status_code==200:#响应体正常
        print(f'Page {star_num // 25 + 1} Ok')
    else:
        print(response.status_code)#返回状态码,查看具体异常原因
    html=response.text
    soup=BeautifulSoup(html,'html.parser')

    #找到所有电影的条目,一个条目对应一部电影
    #右键,检查,检查,点击自己想要获取的页面元素,可以得到对应的html结构。以下提取部分根据网页对应结构编写,不止一种方法。
    item=soup.findAll('div',class_='item')#与python中class区分
    for movie in item:
        # 提取标题
        title.append(movie.find('span',class_='title').text)
        #提取年份
        year.append(re.findall('\d+',movie.find('p').text)[0])
        #提取评分
        score.append(movie.find('span',class_='rating_num').text)
        #提取类型
        type.append(movie.find('div',class_='bd').find('p').text.split('/')[-1].split(';')[-1].split())
        #提取评论数
        review.append(re.findall('\d+',movie.find('div',class_='star').text)[-1])
        #提取导演
        director.append(movie.find('div',class_='bd').find('p').text.split('/')[0].split(':')[1].split(';')[0].split('\xa0')[0])
print('title:',title)#查看获取元素是否是自己想要的元素
print('year:',year)
print('score:',score)
print('type:',type)
print('review:',review)
print('director',director)

#构建输出路径
out_path='./douban250.csv'
#创建电影信息字典
film_dict={
    'title':title,
    'year':year,
    'score':score,
    'type':type,
    'review':review,
    'director':director
}
film_250=pd.DataFrame(film_dict)
if os.path.exists(out_path):#如果该地址存在文件就读取文
爬取豆瓣电影Top250的过程通常涉及以下几个步骤: 1. **获取HTML源码**: 首先,你需要使用Python中的网络爬虫库,如`requests`来发送HTTP请求获取网页内容。例如: ```python import requests url = "https://movie.douban.com/top250" response = requests.get(url) html_content = response.text ``` 2. **解析HTML**: 使用如BeautifulSoup或 lxml 这样的HTML解析库,可以解析出包含电影数据的部分。定位到电影名、评分和参评人数的数据元素,它们通常会被包裹在特定的HTML标签内,比如`<div class="hd">`可能包含了电影名,而评分和参评数在其他类名的元素里。 3. **提取数据**: 根据HTML结构找到对应的CSS选择器或者XPath表达式,提取每个电影的信息。这里是一个例子,假设电影名在`class="title"`,评分在`class="rating_num"`,参评数在`class="pl"`: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'lxml') movie_data = [] for movie in soup.find_all('li', class_='item'): title = movie.find('span', class_='title').text.strip() rating = movie.find('span', class_='rating_num').text participants = movie.find('span', class_='pl').text movie_data.append((title, rating, participants)) ``` 4. **保存数据**: 使用pandas库将数据转换成DataFrame,将其存储为Excel文件: ```python import pandas as pd df_movies = pd.DataFrame(movie_data, columns=['电影名', '电影评分', '参评人数']) df_movies.to_excel('douban_movie_top250.xlsx', index=False) ``` 记得在实际操作时处理可能出现的异常,例如网络错误、页面结构变动等,遵守网站的Robots协议,尊重版权。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值