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

news/2024/10/6 16:37:09 标签: python, 爬虫, 开发语言, 后端, 人工智能

Day41:Python爬取猫眼电影网站的电影信息

1. 项目背景

在本项目中,我们将使用 Python 爬虫技术从猫眼电影网站抓取电影信息。猫眼电影是一个知名的电影信息平台,提供了丰富的电影相关数据。通过这个练习,您将深入学习如何抓取动态网站的数据,包括发送请求、解析 JSON 数据、处理分页等基本技术。

2. 项目目标

  • 爬取猫眼电影网站的电影信息,包括电影名称、评分、票房、上映时间等。
  • 将抓取的数据保存为CSV文件,便于后续分析与使用。

3. 核心工具

  • Python 3.x :编程语言环境。
  • requests :用于发送 HTTP 请求。
  • json :用于解析 JSON 数据。
  • pandas :用于数据存储和处理。
  • BeautifulSoup :用于解析 HTML 文档(如需处理 HTML 内容)。

4. 环境准备

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

pip install requests pandas beautifulsoup4

5. 数据抓取流程

5.1 确定目标网址和接口

我们要爬取的猫眼电影数据源是一个 API 接口,可以通过特定的 GET 请求获取数据。猫眼的电影数据接口如下:

https://maoyan.com/board/4

5.2 发送请求

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

5.3 解析JSON数据

使用 json 库解析获取的 JSON 数据。

5.4 提取电影信息

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

5.5 处理分页

处理多页数据,确保提取到所有电影信息。

5.6 数据存储

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

5.7 运行流程图

开始
发送请求到猫眼
获取JSON内容
解析JSON数据
提取电影信息
处理分页
存储数据到CSV
结束

6. 示例代码

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

6.1 导入必要的库

python">import requests
import pandas as pd
import json
import time

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

python">def fetch_movies(page):
    url = f'https://maoyan.com/board/4?offset={page * 10}'
    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.text
    else:
        print("请求失败", response.status_code)
        return None

6.3 解析HTML并提取信息

python">def parse_movies(html):
    movies = []
    soup = BeautifulSoup(html, 'html.parser')
    for item in soup.find_all('div', class_='movie-item-info'):
        title = item.find('p', class_='name').text.strip()
        star = item.find('p', class_='star').text.strip()
        score = item.find('p', class_='score').text.strip()
        release_time = item.find('p', class_='releaese').text.strip().split(':')[-1]
        movies.append({
            'Title': title,
            'Star': star,
            'Score': score,
            'Release Time': release_time
        })
    return movies

6.4 存储数据到CSV

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

6.5 主程序

python">def main():
    all_movies = []
    for page in range(10):  # 爬取前 10 页数据
        html = fetch_movies(page)
        if html:
            movies = parse_movies(html)
            all_movies.extend(movies)
            time.sleep(2)  # 添加延迟,避免请求过快
    save_to_csv(all_movies)

if __name__ == '__main__':
    main()

7. 数据分析与检查

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

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

load_and_check_csv()

8. 样例输出

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

TitleStarScoreRelease Time
你好,李焕英张小斐,贾玲9.62021-02-12
你的婚礼祝绪丹,陈飞宇9.22021-02-14
夺冠巩俐,黄渤9.02020-12-02

9. 注意事项

  1. 爬虫机制:猫眼可能会使用反爬虫机制,建议在请求之间加上延迟,模拟人类访问。
  2. 合法合规:请遵循猫眼的使用协议,确保抓取信息不违反网站政策。
  3. 数据质量:抓取的数据质量可能会受到影响,需要进行数据清洗和校验。

10. 总结

通过本项目,您学习了如何使用 Python 爬虫技术从猫眼电影网站中抓取电影信息。掌握了数据获取、解析和存储的基本流程。接下来,可以尝试改进程序,例如:抓取更详细的电影信息,尝试其他页面或增加异常处理等,以深入理解 Python 爬虫的应用潜力。


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


http://www.niftyadmin.cn/n/5691877.html

相关文章

大厂出来的人为什么不比你高效?

在最近参加的一个线下聚会上,有人问我:“我们单位有来自阿里、腾讯、华为这些大厂的人,为什么我没觉得他们做事比我们这些没大厂经历的人更有章法和效率?”你别说,这一问所反映的现象,与我在阿里巴巴工作时…

Oracle中TRUNC()函数详解

文章目录 前言一、TRUNC函数的语法二、主要用途三、测试用例总结 前言 在Oracle中,TRUNC函数用于截取或截断日期、时间或数值表达式的部分。它返回一个日期、时间或数值的截断版本,根据提供的格式进行截取。 一、TRUNC函数的语法 TRUNC(date) TRUNC(d…

速成java记录(上)

简单学一下,要求不高,能看懂java代码就行。 (太不容易了,已经好久没写博客了,希望以后可以坚持) /*** 文档注释* Author zmj* Data 2024/10/5 15:46 下午* Version 1.0*/import java.util.Scanner;//输入…

改变数组页面重新渲染的操作/那些操作不会重新渲染页面以及解决方法

在前端开发中,当数组数据发生变化时,是否会导致页面重新渲染,以及如何进行相关操作,这取决于使用的具体框架或库(如React、Vue等)及其内部机制。以下是对这一问题的详细解答: 一、会导致页面重…

Redis篇(缓存机制 - 基本介绍)(持续更新迭代)

目录 一、缓存介绍 二、经典三缓存问题 1. 缓存穿透 1.1. 简介 1.2. 解决方案 1.3. 总结 2. 缓存雪崩 2.1. 简介 2.2. 解决方案 2.3. 总结 3. 缓存击穿 3.1. 简介 3.2. 解决方案 3.3. 总结 4. 经典三缓存问题出现的根本原因 三、常见双缓存方案 1. 缓存预热 1…

【unity游戏开发】彻底理解AnimatorStateInfo,获取真实动画长度

前言 前置知识:设置参数后,下一个循环才会切换对应动画,所以在下一个循环获取真实的动画长度 AnimatorStateInfo是结构体!值类型,要不断重复获取才是最新的 主要是自动设置trigger切换的动画自动切回上一个动画&#x…

Pandas -----------------------基础知识(六)

目录 数据类型 查看类型 类型转换 无法转换的值返回NaN 无法转换的值返回原值 datetime类型 datetime类型数据列作为df索引 Python中的timedelta类型 Pandas中的timedelta类型 pd.to_timedelta函数转换timedelta类型 timedelta类型数据作为df索引 分组groupby 分箱…

AI模型部署初认识

AI部署这个词儿大家肯定不陌生,可能有些小伙伴还不是很清楚这个是干嘛的,但总归是耳熟能详了。 近些年来,在深度学习算法已经足够卷卷卷之后,深度学习的另一个偏向于工程的方向–部署工业落地,才开始被谈论的多了起来…