使用爬虫爬取电影网站的电影信息并且保存到csv

目录

  1. 项目概述
  2. 代码解释
  3. 实现过程中出现的问题
  4. 感言

1. 项目概述

随着互联网的快速发展,网络上的信息量呈指数级增长,尤其是影视内容。在这个项目中,我们使用 Python 编程语言的 requestslxml 库来爬取某电影网站的电影数据。我们的目标是获取不同类别(如喜剧、爱情、恐怖等)的电影信息,并将其保存为 CSV 文件,便于后续的数据分析与处理。

2. 代码解释

以下是项目的代码及详细解释:

2.1 导入库:首先,我们导入了三个必要的库:

  • requests:用于发送 HTTP 请求并获取网页内容。
  • lxml.html:用于解析 HTML 文档,提取所需的数据。
  • pandas:用于数据处理和存储,方便将数据保存为 CSV 文件。
    import requests
    from lxml import html
    import pandas as pd
    

2.2 类别列表:定义一个包含多个电影类别的列表。这个列表用于循环遍历,获取每个类别的电影信息。 

# 类别列表
categories = ["喜剧", "爱情", "恐怖", "动作", "科幻", "剧情"]

2.3 基础 URL:定义一个基础 URL 模板,{} 是占位符,将在后续代码中用具体的类别名称进行格式化。这种设计使得构建 URL 变得简单且灵活。

# 基础 URL
base_url = "https://sc1080.top/index.php/vod/show/class/{}/id/1.html"

 2.3 循环遍历类别:使用 for 循环遍历 categories 列表中的每个类别,使用 format() 方法将当前类别插入到基础 URL 中,生成完整的请求 URL。同时,打印出当前正在处理的类别和对应的 URL,便于调试和追踪。

for category in categories:
        # 构建类别的 URL
    url = base_url.format(category)
    print(f"正在获取类别: {category} - URL: {url}")

 

2.4 发送请求并编码:使用 requests.get() 方法向构建的 URL 发送 HTTP GET 请求,以获取网页内容。并且进行编码设置 response.encodingresponse.apparent_encoding,确保网页内容编码正确,以避免中文字符乱码。

    # 发送请求
    response = requests.get(url)
    response.encoding = response.apparent_encoding  # 确保编码正确

2.5 解析 HTML并提取数据:使用 lxmlfromstring() 方法将获取的网页内容解析为 HTML 树,然后使用 XPath 表达式选择包含电影信息的所有节点,并将结果存储在 movies 列表中。这个 XPath 定位到每个电影条目的容器,确保能提取到相关信息。

    # 解析网页内容
    tree = html.fromstring(response.text)
    # 获取电影列表中的所有电影数据
    movies = tree.xpath('//*[@id="main"]/div/div[2]/div[1]/div/div[@class="module-item"]')

2.6 初始化数据存储:创建一个空列表 movie_data,用于存储当前类别下的所有电影数据,并且对每个 movie 对象进行遍历,在 try 块中提取电影的各项信息并且添加到movie_data中

  • movie_title:使用 XPath 获取电影标题。
  • cover_image:获取电影封面图片的 URL。
  • release_date:获取电影的出版日期。
  • actors:获取电影主演的列表。
    # 创建一个空列表用于存储当前类别的电影数据
    movie_data = []
    for movie in movies:
        try:
            movie_title = movie.xpath('.//div[@class="module-item-pic"]/a/@title')[0]  # 电影标题
            cover_image = movie.xpath('.//div[@class="module-item-pic"]/img/@src')[0]  # 封面地址
            release_date = movie.xpath('.//div[@class="module-item-caption"]/span[1]/text()')[0]  # 出版日期
            actors = movie.xpath('.//div[@class="module-item-content"]/div[2]/a/text()')  # 主演
                    # 将电影数据添加到列表中
            movie_data.append({
                "标题": movie_title,
                "封面地址": f"https://sc1080.top{cover_image}",
                "出版日期": release_date,
                "主演": ', '.join(actors)
            })

2.7 数据存储到csv:将 movie_data 列表转换为 Pandas DataFrame,使用 to_csv() 方法将 DataFrame 保存为 CSV 文件,文件名为当前类别名称,确保不包含索引,且编码格式为 UTF-8,避免中文乱码。

    # 创建 DataFrame 并保存到每个类别的 CSV 文件
    df = pd.DataFrame(movie_data)
    category_filename = f'{category}.csv'  # 使用类别名称作为文件名
    df.to_csv(category_filename, index=False, encoding='utf-8-sig')
    print(f"{category} 数据已成功保存到 '{category_filename}'")

3. 实现过程中出现的问题

在项目实施过程中,我们遇到了一些挑战:

  • XPath 的使用:最初,在获取数据时,由于 XPath 路径的书写错误导致无法获取到所需信息。通过反复检查和调试,最终找到了正确的 XPath。

  • 网络请求的频率:在发送请求的过程中,频繁的请求可能会导致服务器的防爬虫机制触发,导致获取的数据不完整。为此,我们在请求之间加入了适当的延迟(例如 time.sleep()),以降低请求频率。

  • 数据格式:在将数据保存为 CSV 文件时,确保编码格式为 UTF-8,以避免中文字符出现乱码。

4. 感言

通过这个项目,我深入了解了网页爬虫的基本原理与实用技巧。实践中,我不仅提升了编程能力,还对数据获取和处理有了更深的认识。这次经历让我意识到,技术的应用在于解决实际问题,而持续学习和尝试是不断前进的动力。希望未来能够在数据分析和人工智能领域做出更多探索与贡献。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值