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)
相关推荐
a11177640 分钟前
医院挂号预约系统(开源 Fastapi+vue2)
前端·vue.js·python·html5·fastapi
0思必得01 小时前
[Web自动化] Selenium处理iframe和frame
前端·爬虫·python·selenium·自动化·web自动化
virus59451 小时前
悟空CRM mybatis-3.5.3-mapper.dtd错误解决方案
java·开发语言·mybatis
初次见面我叫泰隆1 小时前
Qt——3、常用控件
开发语言·qt·客户端
无小道2 小时前
Qt——QWidget
开发语言·qt
时艰.2 小时前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
梵刹古音3 小时前
【C语言】 函数基础与定义
c语言·开发语言·算法
摘星编程3 小时前
OpenHarmony + RN:Calendar日期选择功能
python
梵刹古音3 小时前
【C语言】 结构化编程与选择结构
c语言·开发语言·嵌入式
Yvonne爱编码3 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python