15分钟学 Python 第40天:Python 爬虫入门(六)第一篇

Day40 :Python 爬取豆瓣网前一百的电影信息

1. 项目背景

在这个项目中,我们将学习如何利用 Python 爬虫技术从豆瓣网抓取前一百部电影的信息。通过这一练习,您将掌握网页抓取的基本流程,包括发送请求、解析HTML、存储数据等核心技术。

2. 项目目标

  • 爬取豆瓣电影前一百部电影的信息,包括电影名称、评分、评价人数和影片链接。
  • 将抓取的数据保存为CSV文件,便于后续分析。

3. 核心工具

  • Python 3.x :作为编程语言。
  • requests :用于发送 HTTP 请求。
  • BeautifulSoup :用于解析 HTML 文档。
  • pandas :用于数据存储和处理。
  • CSV :文件格式,用于存储数据。

4. 环境准备

确保您的环境中安装了以下库。在终端中运行以下命令:

pip install requests beautifulsoup4 pandas

5. 数据抓取流程

5.1 确定目标网址

我们需要爬取的目标网址为:https://movie.douban.com/top250

5.2 发送请求

使用 requests 库向网页发送请求,获取网页内容。

5.3 解析HTML

使用 BeautifulSoup 解析获取的 HTML 文档。

5.4 提取电影信息

从解析的内容中提取所需的电影信息。

5.5 数据存储

将提取到的数据存储为 CSV 文件。

5.6 运行流程图

开始
发送请求到豆瓣
获取HTML内容
解析HTML
提取电影信息
存储数据到CSV
结束

6. 示例代码

以下是完整的代码示例,分为几个功能部分以便更好理解。

6.1 导入必要的库

import requests
from bs4 import BeautifulSoup
import pandas as pd

6.2 发送请求并获取页面内容

def fetch_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textelse:print("请求失败", response.status_code)return None

6.3 解析HTML并提取信息

def parse_page(html):soup = BeautifulSoup(html, 'html.parser')movies = []for item in soup.find_all('div', class_='item'):title = item.find('span', class_='title').textrating = item.find('span', class_='rating_num').textnum_ratings = item.find('div', class_='star').find_all('span')[-1].text[:-3]  # 去掉"人评价"link = item.find('a')['href']movies.append({'Title': title,'Rating': rating,'Number of Ratings': num_ratings,'Link': link})return movies

6.4 存储数据到CSV

def save_to_csv(movies, filename='douban_movies.csv'):df = pd.DataFrame(movies)df.to_csv(filename, index=False, encoding='utf-8-sig')print(f"数据已保存到 {filename}")

6.5 主程序

def main():url = 'https://movie.douban.com/top250'html = fetch_page(url)if html:movies = parse_page(html)save_to_csv(movies)if __name__ == '__main__':main()

7. 数据分析与检查

运行完毕后,我们可以使用 pandas 读取 CSV 文件并检查数据:

def load_and_check_csv(filename='douban_movies.csv'):df = pd.read_csv(filename)print(df.head())print(f"总电影数: {len(df)}")load_and_check_csv()

8. 样例输出

执行后,输出的 douban_movies.csv 文件中将包含如下示例数据:

TitleRatingNumber of RatingsLink
肖申克的救赎9.7732099https://movie.douban.com/subject/278\n
这个杀手不太冷9.4626208https://movie.douban.com/subject/1309191\n
霸王别姬9.6595214https://movie.douban.com/subject/1291546\n

9. 注意事项

  1. 反爬虫机制:豆瓣可能会使用反爬虫技术,如果频繁请求可能会被封禁,建议在请求之间加上延迟。
  2. 合法合规:请遵循使用网站的使用协议,确保抓取信息不违反网站的政策。
  3. 数据质量:抓取到的内容质量可能会有所不同,需要在处理和存储时多加注意。

10. 总结

通过这个项目,您学习了怎样使用 Python 爬虫从豆瓣网抓取数据。掌握了数据获取、解析和存储的基本流程。接下来可以尝试改进程序,例如:增加多线程支持、提取更多信息、抓取多个页面等,以深入理解 Python 爬虫的潜力和应用。


在这里插入图片描述
怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch基础_2.数据类型

文章目录 一、基本的数据类型1.1、keyword1.2、text1.3、数值类型1.4、布尔类型1.5、时间类型 二、复杂的数据类型三、字段映射 一、基本的数据类型 1.1、keyword keyword类型是不进行切分的字符串类型。这里的“不进行切分”指的是:在索引时,对keyword…

m4a怎么转换成mp3?音频转换MP3只需要这6个小工具!

m4a怎么转换成mp3?M4A和MP3是两种常见的音频格式,M4A通常使用AAC(高级音频编码)进行压缩,提供更高的音质和更小的文件体积,特别适合在Apple设备上使用。而MP3则以其高压缩比和广泛的兼容性著称,…

《Linux从小白到高手》理论篇:Linux的系统服务管理

值此国庆佳节,深宅家中,闲来无事,就多写几篇博文。本篇详细深入介绍Linux的系统服务管理。 系统服务通常在系统启动时自动启动,并在后台持续运行,为系统和用户提供特定的功能。例如,网络服务、打印服务、数…

EWSTM8 IAR for STM8 软件分享

1. 软件简介 EWSTM8,即 IAR for STM8,全称为 IAR Embedded Workbench for STM8,它是 IAR ARM 嵌入式工作台之一,用于开发 STM8。IAR 有多个不同名的版本,对应不同的开发对象。 EWSTM8最新版本为V3.11(202…

基于 STM32F407 的 SPI Flash下载算法

目录 一、概述二、自制 FLM 文件1、修改使用的芯片2、修改输出算法的名称3、其它设置4、修改配置文件 FlashDev.c5、文件 FlashPrg.c 的实现 三、验证算法 一、概述 本文将介绍如何使用 MDK 创建 STM32F407 的 SPI Flash 下载算法。 其中,SPI Flash 芯片使用的是 W…

Apollo配置中心实战

本地快速部署请参见Quick Start 编译打包Apollo cd ~/Documents/workspace/apollo sh scripts/build.sh运行Apollo sh src/main/scripts/startup.sh # $SERVICE_NAME".jar"配置服务 元数据服务 cd ~/Documents/workspace/apollo/apollo-configservice nohup java …

【重学 MySQL】四十八、DCL 中的 commit 和 rollback

【重学 MySQL】四十八、DCL 中的 commit 和 rollback commit的定义与作用rollback的定义与作用使用场景相关示例注意事项DDL 和 DML 的说明 在MySQL中,DCL(Data Control Language,数据控制语言)用于管理数据库用户和控制数据的访问…

windows C++-创建基于代理的应用程序(上)

本文介绍了如何创建基本的基于代理的应用程序。 在这个案例中,你可以创建一个代理,从文本文件中异步读取数据。 应用程序使用 Adler-32 校验和算法来计算该文件内容的校验和。 创建控制台应用 本部分介绍了如何创建 C 控制台应用程序,用于引…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下docker学习02(yum源切换及docker安装配置)

2 前期工作 2.1 切换yum源并更新 删除/etc/yum.repos.d/原有repo文件,将Centos-7.repo库文件拷贝到该目录下。 然后清楚原有缓存yum clean all 生成新的缓存yum makecache 更新yum update –y 然后再确认/etc/yum.repos.d/不会有其他库文件,只留下…

RabbitMq生产者可靠性

基本概念: RabbitMQ生产者可靠性主要涉及确保消息能够可靠地发送到RabbitMQ服务器,并且在出现故障时能够进行适当的处理。 消息确认机制(Publisher Confirms): 启用 Publisher Confirms:生产者在发送消息之…

elasticsearch设置账号和密码

1、es安装,挂载路径根据实际情况修改 docker run -d --restart always \ --name es \ -e "ES_JAVA_OPTS-Xms512m -Xmx512m" \ -e "discovery.typesingle-node" \ -e "TZAsia/Shanghai" \ -v /mnt/data/efk/es/data:/usr/share/elast…

Android高级控件

文章目录 1.下拉列表Spinner1.数组适配器ArrayAdapter2.简单适配器SimpleAdapter3.基本适配器BaseAdapter 2.列表视图ListView3.网格视图GridView4.翻页视图ViewPager5.翻页标签栏pagerTabStrip6.ViewPager实现引导页7.碎片Fragment1.Fragment静态注册2.Fragment生命周期3.Frag…

【数据库】MongoDB的索引功能及其在Java中的实现

MongoDB 的索引功能极大地提高了查询性能。通过创建索引,MongoDB 可以快速定位到数据,而无需扫描整个集合。本文将介绍 MongoDB 的索引功能及其在 Java 中的实现方法。 1. 什么是索引? 索引是数据库中用于快速查找和排序数据的一种数据结构。…

Hack Uboot

在硬件评估过程中,经常会遇到采用U-Boot的设备。本文旨在阐述U-Boot是什么,从攻击角度来看它为何如此吸引人,以及这种流行的引导程序所关联的攻击面。 U-Boot 特性 U-Boot,即通用引导加载程序(Universal Boot Loader…

SpringBoot实现:古典舞在线交流平台全攻略

第一章 绪论 1.1研究背景 在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种信息的处理。信息是人们对客观世界的具体描述,是人们进行交流与联系的重要途径。人类社会就处在一个对信息进行有效合理的加工中。它将促进…

java中创建不可变集合

一.应用场景 二.创建不可变集合的书写格式(List,Set,Map) List集合 package com.njau.d9_immutable;import java.util.Iterator; import java.util.List;/*** 创建不可变集合:List.of()方法* "张三","李四","王五…

问题解决实录 | bash 中 tmux 颜色显示不全

点我进入博客 如下图,tmux 中颜色显示不全: echo $TERM输出的是 screen 但在 bash 里面输出的是 xterm-256 color 在 bash 里面输入: touch ~/.tmux.conf vim ~/.tmux.conf set -g default-terminal "xterm-256color"使之生效 source …

【设计模式-中介者模式】

定义 中介者模式(Mediator Pattern)是一种行为设计模式,通过引入一个中介者对象,来降低多个对象之间的直接交互,从而减少它们之间的耦合度。中介者充当不同对象之间的协调者,使得对象之间的通信变得简单且…

微知-梅林系统设置无线桥接模式后如何登录梅林路由器?

背景: 本文将介绍2种使用路由器桥接后无法登录桥接路由器的解决办法,主要涉及到华为梅林系统(刷机或者原生)的无线桥接模式。 当图中梅林路由器设置为无线桥接模式后,连接到梅林路由器的调试电脑E,因为会从…

基于ucontext库实现协程类

文章目录 前言协程基础知识协程上下文对称协程与⾮对称协程有栈协程与⽆栈协程 ucontext库接口熟悉一个简单的函数切换自动调用 协程类的实现接口全局变量线程局部变量malloc封装协程切换构造函数协程执行的方法 测试协程切换手动切换复用 前言 协程(Coroutine&…