《Python Web 抓取实战:豆瓣电影 Top 250 数据抓取与分析》

引言

在信息爆炸的时代,掌握数据获取的能力显得尤为重要。通过数据抓取,我们可以从互联网上获取大量有价值的信息,并进行深入分析。本文将介绍如何使用 Python 进行 Web 抓取,以豆瓣电影 Top 250 为例,展示数据抓取的整个过程,并对其进行简单的分析。

1. 环境准备

在开始之前,我们需要确保已经安装了以下 Python 库:

  • requests:用于发送 HTTP 请求。
  • BeautifulSoup:用于解析 HTML 文档。

你可以通过以下命令安装这些库:

pip install requests beautifulsoup4

2. 抓取豆瓣电影 Top 250 数据

我们将从豆瓣电影 Top 250 页面抓取电影的排名、名称、评分以及链接。以下是抓取代码的详细步骤:

2.1 导入库
import requests
from bs4 import BeautifulSoup

2.2 设定抓取的 URL 和 Headers
url = 'https://movie.douban.com/top250?start=0'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36','Cookie': 'bid=rGc9sMDwa54; ap_v=0,6.0; __utma=30149280.1585206026.1731574671.1731574671.1731574671.1; __utmb=30149280.0.10.1731574671; __utmc=30149280; __utmz=30149280.1731574671.1.1.utmcsr=link.csdn.net|utmccn=(referral)|utmcmd=referral|utmcct=/'
}

2.3 抓取数据
for i in range(10):# 构造新的 URLurl = 'https://movie.douban.com/top250?start=' + str(i * 25)print(f"正在抓取第 {i+1} 页:{url}")# 发送 GET 请求data = requests.get(url, headers=headers).content# 解析 HTMLsoup = BeautifulSoup(data, 'lxml')# 使用 CSS 选择器获取电影名称、排名、评分和链接name = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-child(1)')rank = soup.select("#content > div > div.article > ol > li > div > div.pic > em")pingfen = soup.select('#content > div > div.article > ol > li > div > div.info > div.bd > div > span.rating_num')web = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a')# 遍历每一部电影,构造电影信息字符串并打印for i in range(len(name)):temp = str(rank[i].get_text()) + "--" + str(name[i].get_text()) + "--" + str(pingfen[i].get_text()) + "--" + web[i]['href']print(str(temp))

3. 数据分析

抓取到的数据可以进行进一步的分析。以下是一些简单的分析示例:

3.1 统计评分分布

我们可以统计各个评分区间的电影数量,了解评分的分布情况。

from collections import defaultdict# 初始化评分分布字典
rating_distribution = defaultdict(int)for i in range(10):url = 'https://movie.douban.com/top250?start=' + str(i * 25)data = requests.get(url, headers=headers).contentsoup = BeautifulSoup(data, 'lxml')pingfen = soup.select('#content > div > div.article > ol > li > div > div.info > div.bd > div > span.rating_num')for score in pingfen:rating = float(score.get_text())if rating >= 9.0:rating_distribution['9.0+'] += 1elif rating >= 8.0:rating_distribution['8.0-8.9'] += 1elif rating >= 7.0:rating_distribution['7.0-7.9'] += 1else:rating_distribution['7.0-'] += 1print("评分分布:", rating_distribution)

3.2 分析评分与排名的关系

我们可以分析评分与排名之间的关系,看看是否存在高评分但排名较低的情况。

import matplotlib.pyplot as plt# 初始化评分和排名列表
ratings = []
ranks = []for i in range(10):url = 'https://movie.douban.com/top250?start=' + str(i * 25)data = requests.get(url, headers=headers).contentsoup = BeautifulSoup(data, 'lxml')pingfen = soup.select('#content > div > div.article > ol > li > div > div.info > div.bd > div > span.rating_num')rank = soup.select("#content > div > div.article > ol > li > div > div.pic > em")for score, r in zip(pingfen, rank):ratings.append(float(score.get_text()))ranks.append(int(r.get_text()))# 绘制评分与排名的关系图
plt.figure(figsize=(10, 6))
plt.scatter(ranks, ratings, alpha=0.5)
plt.title('豆瓣电影 Top 250 评分与排名关系')
plt.xlabel('排名')
plt.ylabel('评分')
plt.grid(True)
plt.show()

4. 总结

通过本文的实战演示,我们学会了如何使用 Python 进行 Web 抓取,并从豆瓣电影 Top 250 页面获取数据。进一步地,我们对抓取到的数据进行了简单的分析,展示了评分分布和评分与排名的关系。这些技能可以帮助你在日常工作和学习中更好地处理和分析数据,发现数据背后的价值。

希望本文对你有所帮助,欢迎在评论区留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/15555.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数量关系2_余数平方等差、整除和完工

目录 一、余数、平方数与等差数列1.等差数列2.平方数3.余数问题二、整除问题和合作完工问题1.利用倍数特性解决不定方程2.利用整除特性解决纯整除问题3.合作完工一、余数、平方数与等差数列 1.等差数列 ※等比数列不常考,或者考的时候比较复杂,可放弃。 补充1:常用的等差数…

cache中命中率和缺失率

这张图解释了缓存的三个关键指标:命中率、缺失率和缺失损失,并分析了它们在缓存访问中的重要性。 具体说明 命中(Hit): 命中表示要访问的信息在缓存中已经存在,不需要从更慢的主存中读取。命中率&#xff…

Jmeter查看结果树之查看响应的13种详解方法

软件测试资料领取:[内部资源] 想拿年薪40W的软件测试人员,这份资料必须领取~ 软件测试面试刷题工具:软件测试面试刷题【800道面试题答案免费刷】 Jmeter查看结果树查看响应有哪几种方法,可通过左侧面板底部的下拉框选择: 01 Te…

<Project-23 Navigator Portal> Python flask web 网站导航应用 可编辑界面:添加图片、URL、描述、位置移动

目的: 浏览器的地址簿太厚,如下图: 开始,想给每个 Web 应用加 icon 来提高辨识度,发现很麻烦:create image, resize, 还要挑来挑去,重复性地添加代码。再看着这些密密麻麻的含有重复与有规则的…

文心一言 VS 讯飞星火 VS chatgpt (391)-- 算法导论25.1 5题

五、说明如何将单源最短路径问题表示为矩阵和向量的乘积,并解释该乘积的计算过程如何对应 Bellman-Ford 算法?(请参阅24.1节。)。如果要写代码,请用go语言。 文心一言: 在解决单源最短路径问题时,我们可以将问题表示…

如何使用cx_Freeze打包编译python文件

1. 安装 cx_Freeze 首先,确保你已经安装了 cx_Freeze。你可以通过 pip 安装它: pip install cx_Freeze2.创建setup.py from cx_Freeze import setup, Executable import os# 确定包的文件和依赖 build_exe_options {"packages": ["os…

深度学习之其他常见的生成式模型

1.1 什么是自回归模型:pixelRNN与pixelCNN? ​ 自回归模型通过对图像数据的概率分布 p d a t a ( x ) p_{data}(x) pdata​(x)进行显式建模,并利用极大似然估计优化模型。具体如下: p d a t a ( x ) ∏ i 1 n p ( x i ∣ x 1 …

短期电力负荷(论文复现)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

DBeaver如何设置自动刷新数据库表的数据,彻底解放双手!

前言 大家好,我是小徐啊。 DBeaver是一款常用的数据库连接工具,它的优点是免费使用,而且支持的数据库类型超级多,甚至可以直接安装数据库对应的驱动jar包来连接数据库。 比如达梦数据库,之前版本是可以通过jar包方式…

黄仁勋:AI革命将创百万亿美元价值!近屿智能带你入局AIGC

11月13日,NVIDIA在日本成功举办了2024年AI峰会。一场关于人工智能驱动的新工业革命的讨论热烈展开。英伟达创始人兼CEO黄仁勋与软银主席兼CEO孙正义共同探讨了当前技术革命的独特之处及其深远影响。 黄仁勋在会上表示,AI革命将创造的价值不是以万亿美元计…

知网翻译助手及其10款翻译工具使用体验大PK!!!

在这个信息爆炸的时代,翻译工具成了我们日常工作中不可或缺的得力助手。作为一个经常需要处理多语言文件的人,翻译工具对我来说简直是救命稻草。除了知网助手外,我还用过不少翻译软件,现在,我就来说说知网翻译助手和其…

Entity Framework的简单使用案例

需要引入的框架: 实体类: [Table("Users")] internal class User {[Key]public int Id { get; set; }[Required][StringLength(100)][Index(IsUnique true)]public string Username { get; set; }[Required][StringLength(100)]public strin…

Scroll 生态全面启动为 Pencils Protocol 赋能,DAPP 将迎强势腾飞

​Pencils Protocol 是 Scroll 生态最大的综合性 DeFi 平台,随着 DAPP 通证面向市场,Pencils Protocol 生态经济体系也将迎来全面运转。目前,DAPP 通证已经陆续上线了 Gate、Kucoin、Bitget、Coinone 等主流交易市场,全球用户能够…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-23

文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么&#xff…

CPLD架构

1. 通用CPLD构架 传统的CPLD内部构架布局如图1-1所示,可编程互连阵列(PIA)在芯片中心位置,而逻辑阵列块则在芯片四周靠近I/O模块。目前大多数的CPLD都是采用这种结构,包括Xilinx主流的CoolRunner系列和Altera MAX 300…

2024第十四届新华三杯预赛考试大纲

本文档取自新华三杯官方网站

类与对象

类: class默认私有,struct默认公有 面向对象的三大特性: 封装、继承、多态 封装:本质是一种管控;C数据和方法都放在类里面,使用访问限定符对成员限制 类的存储: 每个对象只存成员变量&#…

elf文件简单介绍

文章目录 elf 程序示意图ELF文件格式概述ELF的组成结构1. ELF头部(ELF Header)2. 程序头表(Program Header Table)与程序头项(Program Header Entry)3. 节区头表(Section Header Table&#xff…

【python系列】开篇:自学python的方法

1.前言 唯有自学才是最高效最省钱的学习编程的方法。最高效是因为你可以按照自己的节奏来进行学习,随时随地随心的学习,最主要的是掌握学习方法,当然培训老师是不会告诉你方法的,总是跟着培训老师在盲人摸象。最省钱是不用投入资…

【论文复现】交通路口智能监测平台实现

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀交通路口智能监测平台实现 1.概述2.工程文件简介2.1 工程文件结构2.2 训练检测模型2.2.1 准备数据集2.2.2 训练自己的权重文件2.2.3 使用自己…