Python数据分析–豆瓣电影Top250

利用Python爬取豆瓣电影TOP250并进行数据分析,对于众多爬虫爱好者,应该并不陌生。很多人都会以此作为第一个练手的小项目。当然这也多亏了豆瓣的包容,没有加以太多的反爬措施,对新手比较友好。

手动声明

版权声明:本文为博主原创文章,创作不易

本文链接:https://blog.csdn.net/qq_45176548/article/details/112735850

数据爬取

翻页操作

第一页:https://movie.douban.com/top250

第二页:https://movie.douban.com/top250?start=25&filter=

第三页:https://movie.douban.com/top250?start=50&filter=

观察可知,我们只需要修改start参数即可

反扒说明

推荐阅读:

通过headers字段来反爬

headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫

1.1 通过headers中的User-Agent字段来反爬

反爬原理:爬虫默认情况下没有User-Agent,而是使用模块默认设置

解决方法:请求之前添加User-Agent即可;更好的方式是使用User-Agent池来解决(收集一堆User-Agent的方式,或者是随机生成User-Agent)

1.2 通过referer字段或者是其他字段来反爬

反爬原理:爬虫默认情况下不会带上referer字段,服务器端通过判断请求发起的源头,以此判断请求是否合法

解决方法:添加referer字段

1.3 通过cookie来反爬

反爬原因:通过检查cookies来查看发起请求的用户是否具备相应权限,以此来进行反爬

解决方案:进行模拟登陆,成功获取cookies之后在进行数据爬取

通过请求参数来反爬

请求参数的获取方法有很多,向服务器发送请求,很多时候需要携带请求参数,通常服务器端可以通过检查请求参数是否正确来判断是否为爬虫

2.1 通过从html静态文件中获取请求数据(github登录数据)

反爬原因:通过增加获取请求参数的难度进行反爬

解决方案:仔细分析抓包得到的每一个包,搞清楚请求之间的联系

2.2 通过发送请求获取请求数据

反爬原因:通过增加获取请求参数的难度进行反爬

解决方案:仔细分析抓包得到的每一个包,搞清楚请求之间的联系,搞清楚请求参数的来源

2.3 通过js生成请求参数

反爬原理:js生成了请求参数

解决方法:分析js,观察加密的实现过程,通过js2py获取js的执行结果,或者使用selenium来实现

2.4 通过验证码来反爬

反爬原理:对方服务器通过弹出验证码强制验证用户浏览行为

解决方法:打码平台或者是机器学习的方法识别验证码,其中打码平台廉价易用,更值得推荐

在这里我们只需要添加请求头即可

数据定位

这里我使用的是xpath

推荐阅读:

# -*- coding: utf-8 -*-

# @Author: Kun

import requests

from lxml import etree

import pandas as pd

df = []

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

'Referer': 'https://movie.douban.com/top250'}

columns = ['排名','电影名称','导演','上映年份','制作国家','类型','评分','评价分数','短评']

def get_data(html):

xp = etree.HTML(html)

lis = xp.xpath('//*[@id="content"]/div/div[1]/ol/li')

for li in lis:

"""排名、标题、导演、演员、"""

ranks = li.xpath('div/div[1]/em/text()')

titles = li.xpath('div/div[2]/div[1]/a/span[1]/text()')

directors = li.xpath('div/div[2]/div[2]/p[1]/text()')[0].strip().replace("\xa0\xa0\xa0","\t").split("\t")

infos = li.xpath('div/div[2]/div[2]/p[1]/text()')[1].strip().replace('\xa0','').split('/')

dates,areas,genres = infos[0],infos[1],infos[2]

ratings = li.xpath('.//div[@class="star"]/span[2]/text()')[0]

scores = li.xpath('.//div[@class="star"]/span[4]/text()')[0][:-3]

quotes = li.xpath('.//p[@class="quote"]/span/text()')

for rank,title,director in zip(ranks,titles,directors):

if len(quotes) == 0:

quotes = None

else:

quotes = quotes[0]

df.append([rank,title,director,dates,areas,genres,ratings,scores,quotes])

d = pd.DataFrame(df,columns=columns)

d.to_excel('Top250.xlsx',index=False)

for i in range(0,251,25):

url = "https://movie.douban.com/top250?start={}&filter=".format(str(i))

res = requests.get(url,headers=headers)

html = res.text

get_data(html)

原文链接:https://blog.csdn.net/qq_45176548/article/details/112735850

结果如下:

数据分析

获取数据后,就可以对自己感兴趣的内容进行分析了

数据预处理

上映年份格式不统一

year = []

for i in df["上映年份"]:

i = i[0:4]

year.append(i)

df["上映年份"] = year

df["上映年份"].value_counts()

x1 = list(df["上映年份"].value_counts().sort_index().index)

y1 = list(df["上映年份"].value_counts().sort_index().values)

y1 = [str(i) for i in y1]

上映年份分布

c1 = (

Bar()

.add_xaxis(x1)

.add_yaxis("影片数量", y1)

.set_global_opts(

title_opts=opts.TitleOpts(title="Top250年份分布"),

datazoom_opts=opts.DataZoomOpts(),

)

.render("1.html")

)

这里可以看出豆瓣电影TOP250里,电影的上映年份,多分布于80年代以后。其中有好几年是在10部及以上的。

评分分布情况

plt.figure(figsize=(10,6))

plt.hist(list(df["评分"]),bins=8,facecolor="blue", edgecolor="black", alpha=0.7)

plt.show()

大多分布于「8.5」到「9.2」之间。最低「8.3」,最高「9.6」

排名与评分分布情况

plt.figure(figsize=(10,5), dpi=100)

plt.scatter(df.index,df['评分'])

plt.show()

总的来说,排名越靠前,评价人数越多,并且分数也越高。

评论人数TOP10

c2 = (

Bar()

.add_xaxis(df1["电影名称"].to_list())

.add_yaxis("评论数", df1["评价分数"].to_list(),color=Faker.rand_color())

.reversal_axis()

.set_series_opts(label_opts=opts.LabelOpts(position="right"))

.set_global_opts(title_opts=opts.TitleOpts(title="电影评论Top10"))

.render("2.html")

)

让我们来看看人气最高的有哪些影片,你又看过几部呢?

导演排名

可以看到这些导演很

python 豆瓣评论数据分析_Python数据可视化分析--豆瓣电影Top250相关推荐

  1. 基于Python的淘宝行为数据可视化分析

    项目背景&总结: 项目背景 完成如下商业分析任务,通过数据分析和可视化展示,充分挖掘数据的价值,让数据更好地为业务服务: 流量分析:PV/UV是多少,通过分析PV/UV能发现什么规律? 漏斗分 ...

  2. python 豆瓣评论数据分析_Python爬虫实战案例:豆瓣影评大数据分析报告之网页分析...

    个人希望,通过这个完整的爬虫案例(预计总共4篇短文),能够让爬虫小白学会怎么做爬虫的开发,所以在高手们看来,会有很多浅显的废话,如果觉得啰嗦,可以跳过一些内容~ 上一篇文章给大家简单介绍了Python ...

  3. 基于Python语言的PUBG游戏数据可视化分析系统

    [success]写于2019年大作业[/success] 博客链接:https://www.iamzlt.com/?p=299 代码链接请到博客链接内查看. 摘要 随着网络技术的兴起和普及,网络游戏 ...

  4. python画熊猫论文_Python数据可视化之美:专业图表绘制指南(全彩)

    Python数据可视化之美:专业图表绘制指南(全彩)电子书 系统性地介绍Python 的绘图语法系统,包括matplotlib.Seaborn.plotnine 包,以及用于地理空间数据可视化的Bas ...

  5. python图形绘制星空图_Python数据可视化教程:基于Plotly的动态可视化绘图

    1. plotly 介绍 Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图, 下面我们以jupyter ...

  6. python 柱状图设置样式_python数据可视化之图表样式调整(三)

    适当的调整图表样式可以大大增强图表"讲故事"的能力.实际工作中可能需要调整很多东西,因此本篇不可能涵盖所有图表样式.本篇将介绍一些最有用的基本知识:更改图形大小.颜色和字体大小;加 ...

  7. 数据分析_python数据可视化(基于matplotlib+pandas)

    文章目录 前言 1.数据可视化的基本流程 2.图表的基本基本元素 3.对比excel进行python可视化 3.1.建立画布 3.2建立坐标系 3.3设置图元素 3.4 图可视化 最近学习宋俊红大佬& ...

  8. python制作音乐相册_Python数据可视化:网易云音乐歌单

    本文转载自公众号 | 法纳斯特 作者 | 小F 网易云音乐2018年度听歌报告-遇见你,真好. 相信有不少人在上周,应该已经看过自己网易云音乐的年度报告了. 小F也是去凑凑热闹,瞅了一波自己的年度听歌 ...

  9. python蜡烛图预测_Python数据可视化:如何用mplfinance创建蜡烛图

    一图胜千言,使用Python的matplotlib库,可以快速创建高质量的图形. 我们团队推出一个新的系列教程:Python数据可视化,针对初级和中级用户,将理论和示例代码相结合,使用matplotl ...

最新文章

  1. 华为防火墙安全区域介绍
  2. 全球变暖java_全球变暖 蓝桥杯
  3. The Preliminary Contest for ICPC Asia Nanjing 2019ICPC南京网络赛
  4. 关于CRM one order函数的一些代码审查和改进建议
  5. 去掉“搜一搜”后,让“查看新贴”等按钮居中
  6. 关闭惠普计算机通电启动注册表,惠普10代cpu电脑装win7卡logo(安装程序正在更新注册表设置)解决方法...
  7. 保证服务4个9的可用性的核心思路
  8. 三菱plc控制电动推杆
  9. app邀请分享免填邀请码解决方案-邀请机制的要点、形式
  10. javascript自动分号补齐带来的坑
  11. 中国农业大学研究生计算机学院宿舍,中国农业大学宿舍条件怎么样
  12. 2016年虾神公众号预告
  13. 给UIButton设置不同状态下的背景色
  14. 计算机考试函数应用题及答案,2016年全国职称计算机考试EXCEL考前练习题4
  15. 自己写一个控制台人脸识别程序
  16. GeoServer结合FWTools切片工具发布影像金字塔切片
  17. Java 身份证验证(IdCardVerification)
  18. 计算机与软件技术系毕业设计(论文)实施意见-计算机毕业设计论文怎么写
  19. 华为RS2 传输介质
  20. 亚马逊继续“激进” :Q3吐出超10倍净利

热门文章

  1. Pycharm安装pip第三方模块sprites
  2. 11月14日服务器维修,[11月14日]部分服务器临时维护公告
  3. 【ESP 保姆级教程】疯狂Node.js服务器篇 ——教室WiFi自动打卡考勤(飞书群信息+NodeJs)
  4. 中国纤维增强塑料(FRP)行业市场供需与战略研究报告
  5. Java简单的药店管理系统,实现添加,查询,修改,删除,打印药品信息
  6. 浅谈移动支付商户业务
  7. Chrome,IE等浏览器主页被hao123等篡改的解决方法
  8. 企业到底需要什么样的企业邮箱?
  9. 研究表明:打车软件是城市拥堵的罪魁祸首
  10. Wordpress安装百度统计方法