python爬虫+数据分析完整流程--豆瓣电影分类排行榜

2023-11-05

整体思路:利用requests,BeautifulSoup爬虫豆瓣电影分类排行榜数据;数据输出到本地csv文件;构建mongodb数据库,将数据存放入mongodb;利用pandas,matplotlib画图分析数据。

1.利用BeautifulSoup爬虫豆瓣电影分类排行榜数据

第一步:分析url规律,不同的电影分类对应url循环代入requests和BeautifulSoup中解析,再分析解析到的网站结构,提取想要的信息

获取电影分类的网页,传入函数douban中

分析网站结构,提取信息,并存放到对应的列表中

**这里踩了一个坑是for循环的范围,后来通过print S2列表发现长度不一,所以这里改成了range(len(s2))严谨一点(ip被封过一次,所以这里在请求头后面还加上了代理ip)

 **由于电影类别不止一个,这里想把它们都放到dataframe中的同一列,所以用了.join合并。

2.数据输出到本地csv文件

3.文件保存mongodb数据库

4.画图数据分析

 

 **这里由于某些电影是多个国家共同出品,国家这个列表的元素中可能还嵌入了列表,导致报错:列表类型不可哈希,为了程序简练一点,这里我直接取了电影国家的第一个元素,由于plot函数的x,y的维度需要一致,在x轴国家那里构造了集合与列表的嵌套样式。

调试最久的地方是在mean()函数那里,由于评分之前没有定义字符类型,导致评分的‘9.7’等元素的类型为‘str’,非数字类型,describe()函数中没有平均值属性

源代码如下

python源代码

import requests
from bs4 import BeautifulSoup
import json
import pandas as pd
import pymongo
import matplotlib.pyplot as plt
title_list=[]
lianjie_list=[]
rank_list=[]
leibie_list=[]
s2_list=[]
pingfen_list=[]
didian_list=[]
actors_list=[]
sum=0
#解析网页
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/90.0.818.66'}
def douban(urls):#针对不同分类不同链接,创建爬虫函数
    response=requests.get(urls,headers=headers,proxies={'http':'http://47.100.207.26:8080'})#获取网页
    soup=BeautifulSoup(response.text,'lxml')#解析网页
    s=soup.get_text()#去除网页标签,s为字符串格式,所以用json.loads变成python对象中的list
    s2=json.loads(s)#格式化,字符串格式变成集合格式list,方便提取数据
    s2_list.append(len(s2))
    for j in range(len(s2)):#循环处理集合元素中的信息
        s3=s2[j]#提取集合的第i个元素,此集合中的元素本质为字典
        title=s3.get('title')#提取电影题目
        title_list.append(title)
        rank=int(s3.get('rank'))#提取电影排名
        rank_list.append(rank)
        lianjie=s3.get('url')#提取电影链接
        lianjie_list.append(lianjie)
        leibie=s3.get('types')#提取电影类型
        leibie=''.join(leibie)
        leibie_list.append(leibie)
        pingfen=float(s3.get('rating')[0])#提取电影评分
        pingfen_list.append(pingfen)
        didian=s3.get('regions')[0]#提取电影国家,有的电影存在多个制作地点,为了方便后面plot,取第一个地点
        didian_list.append(didian)
        actors=s3.get('actors')#提取电影主演
        actors=''.join(actors)
        actors_list.append(actors)
for i in range(1,32):
    if i==31:
        urls='https://movie.douban.com/j/chart/top_list?type=31&interval_id=100%3A90&action=&start=0&limit=11'
    else:
        urls = 'https://movie.douban.com/j/chart/top_list?type={}&interval_id=100%3A90&action=&start=0&limit=50'.format(i)  # 观察豆瓣链接格式的编码规则,创建爬虫
    douban(urls)
dict={'题目':title_list,'分类排名':rank_list,'链接':lianjie_list,'电影类别':leibie_list,'评分':pingfen_list,'国家':didian_list,'演员':actors_list}
dt=pd.DataFrame(dict)#变成dataframe
dt.to_csv(r'C:\Users\asus\Desktop\douban.csv',mode='a')#导出到本地表格
for k in range(len(s2_list)):
    sum+=s2_list[k]
print('总条数:',sum)#记录抓取条数
#导入mongodb数据库
client=pymongo.MongoClient('mongodb://localhost:27017/')#链接mongodb数据库
db=client['dianying']#创建数据库dianying
db.collection.insert_one(dict)#数据库中插入字典型数据dict
#plot函数画图
print(list(set(dt['国家'])))
plt.plot(list(set(dt['国家'])),dt['评分'].groupby(dt['国家']).mean())
plt.title('各国电影评分')
plt.xlabel('国家分类')
plt.ylabel('评分')
plt.show()
print('运行完成')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫+数据分析完整流程--豆瓣电影分类排行榜 的相关文章

  • Keras 中的 load_model 和 Lambda 层

    如何加载具有 lambda 层的模型 这是重现行为的代码 MEAN LANDMARKS np load data mean shape 68 npy def add mean landmarks x mean landmarks np ar
  • 使用 JSON 将数据从 Python 导出到 Tableau?

    如何以表格形式从 Python 获取 400 万行和 28 列 我假设 基于搜索 我应该使用 JSON 格式 这种格式可以处理大量数据并且足够快 我制作了 12 行数据的子集并尝试使其正常工作 好消息是 它正在发挥作用 坏消息 不是我想要的
  • Python Turtle 中的 onkeypress() 和 Listen() 问题

    我的一个功能有问题 我使用 Python 3 7 当我尝试使用onkeypress 函数 什么也没有发生 我尝试检查它 但是当我按键时乌龟模块没有反应 我尝试使用 w 键向上移动桨 但这不起作用 以下是我的 py 文件 main py im
  • SQLAlchemy如何为同一个表定义两个模型

    我有一个表 其中一列是具有两个值的 varchar groupA groupB 当我创建模型时 我想实现两件事 A 组模型 包含 X 数量的相关函数 B 组模型 包含 Y 数量的相关函数 两个模型的功能并不相同 尽管它们代表了same ta
  • 如何在不使用pygame的情况下检测按键事件和按键按住事件

    我目前正在寻找一个能够检测 监视键盘的库 我的目的是检测何时按下某个键 以及当它发生时应该发生一些事情 大多数 SO 帖子建议使用 pygame 但我发现它有点太多了 涉及一个像这样的库来完成这个简单的任务 我也尝试过pynput 这导致只
  • Keras ImageDataGenerator 验证分割未从打乱的数据集中选择

    如何将图像数据集随机拆分为训练数据集和验证数据集 更具体地说 validation splitKeras 中的论证ImageDataGenerator函数不是随机地将我的图像分割为训练和验证 而是从未洗牌的数据集中分割验证样本 当指定val
  • 视频的 EXIF 之类的东西

    有没有从视频文件中获取信息的标准方法 对于图像 我们有 EXIF 数据 可用于获取有关图像文件的日期 时间 大小等信息 我想知道视频是否也有这样的东西 用例是 我有很多用数码相机拍摄的视频 我想将它们重命名为更有意义的名称 例如 YYYY
  • OSMNX - 边缘的哪个“部分”被认为是最近的

    我正在使用 OSMNX 中的 returned edges 函数 我不清楚在进行此计算时使用边缘的哪个 部分 它是边缘的任何部分吗 是中间点吗 对于网络中的长边来说 这会产生很大的差异 这取决于您如何参数化该函数 来自nearest edg
  • 从 paramiko 获取 PID

    我找不到一个简单的答案 我正在使用 paramiko 远程登录并执行多个进程 我需要每个进程的 PID 以便稍后检查它们 paramiko 中似乎没有函数来获取执行命令的 PID 所以我尝试使用以下命令 stdin stdout stder
  • python中matlab find函数的替换

    我正在尝试寻找合适的python函数来替代matlabfind在我的脚本和一些谷歌搜索中我看到np where 大多数时候都能解决目的 但在双重条件的情况下 我有不同的输出 有人可以告诉我这种方法有什么问题以及如何继续吗 示例代码和差异如下
  • 如何使用 Python 从 URL 中删除查询字符串

    Example http example com a text q2 text2 q3 text3 q2 text4 删除后 q2 它将返回 http example com q text q3 text3 在这种情况下 出现了多个 q2
  • 如何在Python中生成0-1矩阵的所有可能组合?

    如何生成大小为 K N 的 0 1 矩阵的所有可能组合 例如 如果我取 K 2 和 N 2 我会得到以下组合 combination 1 0 0 0 0 combination 2 1 0 0 0 combination 3 0 1 0 0
  • 使用 Cython 扩展模块分发共享库和一些 C 代码

    我正在尝试从大型 C 共享库 libbig so 中获取一些函数 并通过 Cython 将它们公开给 Python 为此 我有一个小 C 文件 small cpp 它为我需要的共享库的功能提供了一个薄包装器 从而可以轻松地通过 Cython
  • 相比之下,超出了最大递归深度

    我写了这段代码来计算组合的数量 def fact n return 1 if n 1 else n fact n 1 def combinations n k return fact n fact n k fact k while True
  • 无法通过蓝牙读取心率服务

    我希望创建一个简单的 python 脚本 通过蓝牙从 Polar 传感器读取心率数据 我已经阅读了很多其他帖子 但找不到我能够成功执行的简单内容 我有 Polar 可穿戴设备的设备 MAC 地址 我知道我想要读取的值的服务 UUID HR
  • Python 中 Javascript 的 reduce()、map() 和 filter() 的等价物是什么?

    Python 的等价物是什么 Javascript function wordParts currentPart lastPart return currentPart lastPart word Che mis try console l
  • Python 生成器每次调用都会产生相同的值

    我希望这个生成器生成列表中每个连续值的余弦 但每次都得到相同的值 import math angles range 0 361 3 calculate x coords def calc x angle list for a in angl
  • Mongoose:ObjectId 比较失败不一致

    我有一个简单的工具 用于构建文档集合 然后自动格式化它们以进行 EPUB 或 LaTeX 渲染 该工具是在 ExpressJS 之上编写的 我正在使用 Coffeescript 如果这很重要的话 我对此表示怀疑 使用猫鼬 我有以下内容 Do
  • 如何在(最好是纯)Python 中解码 QR 码图像?

    TL DR 我需要一种使用 最好是纯 Python 从图像文件中解码 QR 码的方法 我有一个带有 QR 码的 jpg 文件 我想使用 Python 对其进行解码 我发现有几个库声称可以做到这一点 PyQRCode 网站在这里 http p
  • Doctest 返回失败,但“预期”和“得到”完美匹配

    我正在尝试做列表部分的第二个练习 http www openbookproject net thinkcs python english2e ch09 html exercises 如何像计算机科学家一样思考 一书的内容 我基本上必须将给定

随机推荐

  • VMware Workstation下载与安装(适用于在官网注册好账号的朋友,许可证秘钥请自行网上搜索获取)

    一 VMware Workstation下载 第一步 点击下方 Resources 链接 进入Vmware官网 本教程适用于已经在官网注册好账号并已经进行登陆的朋友 Resources 第二步 点击 Product Downloads 进入
  • 第二十三篇 DenseNet——论文翻译

    文章目录 摘要 1 引言 2 相关工作 3 DenseNets 4 实验 4 1 数据集 4 2 训练 4 3 CIFAR 和 SVHN 的分类结果 4 4 ImageNet 上的分类结果 5 讨论 摘要 最近的工作表明 如果卷积网络在靠近
  • UNIAPP实战项目笔记30 购物车内容块布局

    UNIAPP实战项目笔记30 购物车内容块布局 主要代码 主要代码 shopcart vue
  • 【网络工程师实战教学】华为ENSP模拟器——NAT配置实验详解_必看干货!

    NAT Network Address Translation 网络地址转换 是将IP数据报文中的IP地址转换为另一个IP地址的过程 当内部IP想要访问外网时 NAT主要实现内部网络和外部网络之间IP的转换 这种通过使用少量的公网IP地址代
  • 剑指offer题解(C++版)

    CSDN话题挑战赛第2期 参赛话题 算法题解 一 常见数据结构 1 数组 3 找出数组中重复的数字 4 二维数组中的查找 5 替换空格 29 顺时针打印矩阵 leetcode 989 数组形式的整数加法 leetcode26 删除有序数组中
  • Python字典使用教程:Python字典常用操作方法

    1 python字典是什么 无论是参加Python培训还是自学 都会接触到Python字典这一章节 字典是Python中比较常用的数据结构 字典中每个成员是以 键 值 对的形式存放具有映射关系的数据 2 Python如何创建字典 字典语法
  • Latex之公式太长跨页

    文章目录 公式环境 跨页公式 公式环境 跨页公式 写毕业论文的过程中 难免会出现较长的公式 如果这个公式恰好是上一页放不下 放到下一页的话 上一页又空一大片 这样就很不美观了 本文介绍对这种公式的处理办法 第一步 在导言区加上命令 allo
  • Qt窗口程序设计

    转载自https blog csdn net lbb2016 article details 52509645 感谢博主 用Qt Creator编写一个简单的窗口程序 这次编写的窗口程序的效果图如下 这个小程序的功能是 在文本框中输入半径
  • Windows建立UDP的客户端和服务端

    一 UDP的服务端建立 udp服务端创建的步骤 1 加载库 2 创建套接字 3 绑定IP地址 4 接收数据 5 发送数据 6 关闭套接字 卸载库 代码如下 include
  • 你必须要记住的动态内存管理函数

    问题引入 首先我们要明白为什么要动态内存分配 这是因为我们所熟知的内存开辟方式通常有两个特点 1 空间开辟大小是固定的 2 数组在声明时 必须指定数组的长度 他所需要的内存在编译的时候分配 但是由于我们对空间的需求多种多样 有时候我们需要的
  • 服务器虚拟机ping不通百度,未知的名称或服务,解决方法

    ping不通百度 未知的名称或服务 解决方法 route添加一条路由 需要先安装net tools工具包 root localhost yum install net tools y root localhost route n Kerne
  • 拉格朗日函数与广义拉格朗日函数

    拉格朗日函数用来求解等式约束的最优化问题 广义拉格朗日函数用来求解不等式约束的最优化问题 无约束优化问题 关于优化问题包括无约束优化问题 等式约束优化问题 不等式约束优化问题 这里简略地介绍一下无约束优化问题 以后再来填坑 考虑无约束优化问
  • TypeError: ‘tuple‘ object does not support item assignment

    TypeError tuple object does not support item assignment 原因 修改了tuple 而tuple是不支持修改的 或者说tuple不支持直接修改 解决方法 定义一个临时变量temp temp
  • Docker日志查看命令

    docker容器列表查看 docker ps 日志查看语法 docker logs OPTIONS CONTAINER OPTIONS说明 f 跟踪日志输出 since 显示某个开始时间的所有日志 t 显示时间戳 tail 仅列出最新N条容
  • 2022十三届蓝桥杯国赛题解

    特此声明 本文仅为参考文档 标准答案请参考官方文档 试题A 该题是一道背包dp题 我的思路是定义三维dp 第一维表示第i个数 第二维表示前i个数的总和为j 第三维表示前i个数 总和为j 第i个数为z的方案数 首先观察这个题的性质 要求互不相
  • 十五、使用Selector(多路复用器)实现Netty中Reactor主从模型

    导论 前面几篇文章我们分别从 一 C10K问题经典问答 二 java nio ByteBuffer用法小结 三 Channel 通道 四 Selector选择器 五 Centos Linux安装nc 六 windows环境下netcat的安
  • 医疗场景下CV应用的总结与思考

    目录 背景 项目总体思路与框架 技术难题及解决思路 Data模块 Modeling模块 Deployment模块 可优化方向 标注流程 基于GAN的眼底图像生成模型 隐私计算 联邦学习 即时标注平台 自动化机器学习 背景 随着新生儿眼底筛查
  • 【Flask】Flask 会话

    Flask Sessions 会话 由于HTTP是无状态的 因此无法纪录客户一连串的动作 必须有一种机制使服务器能认得客户 这就引入了 会话 概念 服务器发给客户一个会话ID 当客户再访问服务器时就带着这个ID 服务器就凭着这个唯一的ID来
  • 毕业实习:Vue+Springboot+MySQL实现的订餐系统

    为期4天的毕业实习的收获 第一部分 vue框架的准备工作 测试vue cli创建工程 要以管理员身份运行cmd 1 在F盘下新建一个F shixuntestvue code文件 2 cd F 3 cd shixuntestvue code
  • python爬虫+数据分析完整流程--豆瓣电影分类排行榜

    整体思路 利用requests BeautifulSoup爬虫豆瓣电影分类排行榜数据 数据输出到本地csv文件 构建mongodb数据库 将数据存放入mongodb 利用pandas matplotlib画图分析数据 1 利用Beautif