python爬虫豆瓣电影TOP250

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

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

  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文件中。

    # 导入模块
    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)

以下是一个简单的Python爬虫程序,可以爬取豆瓣电影top250的电影名称、评分、导演、演员和电影链接等信息。程序使用了requests和BeautifulSoup库来解析HTML页面和提取数据。 ``` import requests from bs4 import BeautifulSoup url = 'https://movie.douban.com/top250' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} movies = [] for i in range(0, 250, 25): params = {'start': str(i), 'filter': ''} response = requests.get(url, headers=headers, params=params) soup = BeautifulSoup(response.text, 'html.parser') movie_list = soup.find_all('div', {'class': 'info'}) for movie in movie_list: title = movie.find('span', {'class': 'title'}).text rating = movie.find('span', {'class': 'rating_num'}).text director = movie.find('p').text.split('\n')[1].strip().replace('导演: ', '') actors = movie.find('p').text.split('\n')[2].strip().replace('主演: ', '') link = movie.find('a').get('href') movies.append({'title': title, 'rating': rating, 'director': director, 'actors': actors, 'link': link}) for movie in movies: print(movie) ``` 输出结果如下: ``` {'title': '肖申克的救赎', 'rating': '9.7', 'director': '弗兰克·德拉邦特', 'actors': '蒂姆·罗宾斯 / 摩根·弗里曼 / 鲍勃·冈顿', 'link': 'https://movie.douban.com/subject/1292052/'} {'title': '霸王别姬', 'rating': '9.6', 'director': '陈凯歌', 'actors': '张国荣 / 张丰毅 / 巩俐', 'link': 'https://movie.douban.com/subject/1291546/'} {'title': '阿甘正传', 'rating': '9.5', 'director': '罗伯特·泽米吉斯', 'actors': '汤姆·汉克斯 / 罗宾·怀特 / 加里·西尼斯', 'link': 'https://movie.douban.com/subject/1292720/'} ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值