python爬虫豆瓣电影TOP250

以下代码是一个简单的网络爬虫程序,用于从豆瓣电影 Top250 页面获取电影信息并保存到 CSV 文件中。以下是代码的一些主要步骤和功能:

  1. 导入模块:代码开始部分导入了 requestsetree 模块用于网络请求和数据解析。

  2. get_html(start) 函数:这个函数用于发起网络请求,获取豆瓣电影 Top250 页面中每页的电影数据。它通过 XPath 解析页面内容,提取电影的标题、链接、导演、评分、评分人数和概要等信息,并调用 save_data() 函数保存到 CSV 文件中。

  3. save_data() 函数:保存电影信息到 CSV 文件中。

  4. 程序入口 if __name__ == '__main__': 部分:在这里,程序会创建或清空一个名为"豆瓣TOP250.csv"的 CSV 文件并写入表头,"名称,网址,导演,评分,评分人数,概要"。然后,循环遍历 Top250 页面的不同部分,并调用 get_html() 函数来获取数据并保存到 CSV 文件中。

  5. 数据清洗与处理:代码中还包含了一些数据清洗和处理的步骤,如读取 CSV 文件、处理缺失值、转换数据类型、处理异常值、数据去重和保存清洗后的数据到csv文件中。

    python 复制代码
    # 导入模块
    import requests  # 网络请求模块
    from lxml import etree  # 数据解析模块
    
    # 发起网络请求
    def get_html(start):
        print('正在爬取', start)
        url = f'https://movie.douban.com/top250?start={start}&filter='
    
        # 请求头信息,防止反爬虫操作
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'}
        res = requests.get(url=url, headers=headers)
    
        print(res.status_code)
    
        html = etree.HTML(res.text)
    
        lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
    
        # 解析数据(xpath解析)
        for li in lis:
            title = ''.join(li.xpath('./div/div[2]/div[1]/a/span[1]/text()')).replace('\n', '').replace(' ', '')
            src = ''.join(li.xpath('./div/div[2]/div[1]/a/@href')).replace('\n', '').replace(' ', '')
            dictor = ''.join(li.xpath('./div/div[2]/div[2]/p[1]/text()')).replace('\n', '').replace(' ', '')
            score = ''.join(li.xpath('./div/div[2]/div[2]/div/span[2]/text()')).replace('\n', '').replace(' ', '')
            comment = ''.join(li.xpath('./div/div[2]/div[2]/div/span[4]/text()')).replace('\n', '').replace(' ', '')
            summary = ''.join(li.xpath('./div/div[2]/div[2]/p[2]/span/text()')).replace('\n', '').replace(' ', '')
            # movies.append({
            #   'title':title,
            #  'src':src,
            # 'score':score,
            # 'comment':comment,
            # 'summary':summary,
            # })
            save_data(title, src, dictor, score, comment, summary)
    
            # print(title,src,dictor,score,comment,summary)
    
            
    
    def save_data(title, src, dictor, score, comment, summary):
        with open('./豆瓣TOP250.csv', 'a+', encoding='utf-8-sig') as f:
            movies_info = f'{title},{src},{dictor},{score},{comment},{summary}\n'
            f.write(movies_info)
    
    if __name__ == '__main__':
        with open('./豆瓣TOP250.csv', 'a+', encoding='utf-8-sig') as f:
            head = '名称,网址,导演,评分,评分人数,概要\n'
            f.write(head)
        for start in range(0, 250, 25):
            get_html(start)
            
            
    import pandas as pd
    # 读取数据
    df = pd.read_csv('豆瓣TOP250.csv')
    # 查看数据信息
    print(df.info())
    # 处理缺失值
    df.dropna(inplace=True)
    # 转换数据类型
    df['评分'] = df['评分'].astype(float)
    # 处理异常值
    df = df[df['评分'] >= 0 & df['评分'] <= 10]
    # 数据去重
    df.drop_duplicates(inplace=True)
    # 保存清洗后的数据
    df.to_csv('豆瓣TOP250.csv', index=False)
相关推荐
方也_arkling26 分钟前
【Java-Day08】static / final / 枚举
java·开发语言
风吹夏回38 分钟前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
Chengbei111 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1121 小时前
web-第一次课后作业
java·开发语言·idea
小熊Coding1 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋91 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本1 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
xiaoshuaishuai81 小时前
C# 内存管理与资源泄漏
开发语言·c#
lsx2024062 小时前
SVN 检出操作
开发语言
田里的水稻2 小时前
OE_ubuntu26.04与宿主机之间复制粘贴内容
人工智能·python·机器人