首页 > 编程语言 >【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据!

【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据!

时间:2024-09-14 10:24:14浏览次数:14  
标签:info python 电影 爬取 df 豆瓣 csv TOP250

目录

一、爬取对象-豆瓣电影TOP250

二、豆瓣电影网站分析

三、python爬虫代码详解

三、完整源码获取


一、爬取对象-豆瓣电影TOP250

今天给大家分享一期豆瓣读书TOP排行榜250的python爬虫案例

爬取的目标网址是:豆瓣电影 Top 250

咱们以目标为驱动,以兴趣为导向,先来看下爬虫程序运行后得到的excel文档数据

那代码是如何实现豆瓣电影TOP250数据爬取的了?下面逐一讲解一下python实现。

二、豆瓣电影网站分析

通过浏览器F12查看所有请求,发现他并没有发送ajax请求,那说明我们要的数据大概率是在html页面内容上。

于是我们 点击右键->查看网页源代码 ,发现我们需要的豆瓣电影评分的排行榜数据都在html页面里

这就简单了,我们直接往下看,上代码。

三、python爬虫代码详解

首先,导入我们需要用到的库

import requests     # 发请求
from lxml import etree  # 解析html
import pandas as pd  # 存取csv
from urllib.parse import urljoin    # url处理

然后,向豆瓣电影TOP250的网页发起请求,获得html页面内容

page_source = requests.get(page_url, headers=headers).text

用lxml库解析html页面

tree = etree.HTML(page_source)

使用xpath来提取我们需要的排行榜数据内容

# 获得数据所在的标签
lis = tree.xpath("//ol[@class='grid_view']/li")

# 循环标签获得电影信息
for li in lis:
    url = extract_first(li.xpath(".//div[@class='hd']/a/@href")).strip()    # 链接
    movie_name = "".join(li.xpath(".//div[@class='hd']/a//text()"))  # 电影名字
    movie_name = re.sub("\s+", "", movie_name)
    score = extract_first(li.xpath(".//span[@class='rating_num']/text()")).strip()  # 评分
    star_people_num = extract_first(li.xpath(".//div[@class='star']/span[4]/text()")).strip()   # 评价人数
    star_people_num = re.search("\d+", star_people_num).group()
    one_evaluate = extract_first(li.xpath(".//p[@class='quote']/span/text()")).strip()  # 一句话评价

    info = "".join(li.xpath(".//div[@class='bd']/p/text()")).strip()   # 电影信息:导演、主演、年份、国家、类型
    infos = info.split("\n")
    director = infos[0].split("\xa0\xa0\xa0")[0]  # 导演
    actor = None
    try:
        actor = infos[0].split("\xa0\xa0\xa0")[1]   # 主演
    except:
        # 只有导演,没有主演的(比如 第3页 窃听风暴)
        pass

其中,需要特殊说明的是,第3页《窃听风暴》这部电影和其他电影页面排版不同:

这部电影只有导演,却没有主演信息,所以会有个异常处理的代码

try:
    actor = infos[0].split("\xa0\xa0\xa0")[1]   # 主演
except:
    # 只有导演,没有主演的(比如 第3页 窃听风暴)
    pass

还有就是有些电影,他的年份、国家、类型的格式有细微的不同之处,所以也需要特殊处理一下。

info_sub = re.sub("\s+", "", infos[1])
info_subs = info_sub.split("/")
if len(info_subs) == 3:
    year = info_subs[0]     # 年份
    country = info_subs[1]      # 国家
    type = info_subs[2]     # 类型
elif len(info_subs) == 4:
    year = str(info_subs[0]) + "/" + str(info_subs[1])  # 年份
    country = info_subs[2]  # 国家
    type = info_subs[3]  # 类型
else:
    print(f"!!!!未匹配上规则!!!! 电影名称={movie_name}", infos)

最后,我们将爬虫爬取的数据保存到csv文档里

def save_to_csv(csv_name):
    """
    数据保存到csv
    @param csv_name: csv文件名字
    @return:
    """
    df = pd.DataFrame()  # 初始化一个DataFrame对象
    df['电影名字'] = movie_names
    df['电影链接'] = urls
    df['评分'] = scores
    df['评分人数'] = star_people_nums
    df['导演'] = directors
    df['主演'] = actors
    df['年份'] = years
    df['国家'] = countrys
    df['类型'] = types
    df['一句话评价'] = one_evaluates
    df.to_csv(csv_name, encoding='utf8', index=False)  # 将数据保存到csv文件
    print("保存文件成功", csv_name)

上面的movie_names、urls等变量都是使用的list来进行存储的,这样才能符合pandas导出数据时的需要,最后调用to_csv()方法即可导出豆瓣电影的排行榜数据到文档里了。

四、完整源码获取

附完整python源码及数据:【python爬虫案例】利用python爬虫爬取豆瓣电影评分TOP250排行数据!


我是 @王哪跑,持续分享python干货,各类副业软件!

标签:info,python,电影,爬取,df,豆瓣,csv,TOP250
From: https://blog.csdn.net/wnapao/article/details/142176494

相关文章

  • trafilatura python web 数据获取库
    trafilaturapythonweb数据获取库,比较适合进行爬虫,数据提取,支持输出数据为csv,json,html,md,txt,xml包含的特性高级web爬虫以及文本发现并行处理在线以及离线输入内容灵活的配置支持,包含了元数据,格式,链接,表格多输出格式,包含了文本,markdown,json,html,xml额外扩展,支持语言检测,gui,速度优化......
  • 基于CNN-LSTM-Attention的共享单车租赁预测研究(数据可换)(Python代码实现)基于CNN-LSTM
                        ......
  • python 时间占位符 毫秒
    在Python中,可以使用datetime模块来处理时间和日期,并结合strftime方法来格式化时间字符串,包括毫秒。strftime方法中使用%f来表示微秒,要表示毫秒,需要对获取到的微秒数除以1000,然后格式化为3位数字。以下是一个示例代码,展示如何获取当前时间,并使用strftime格式化时间,包括毫秒:fromdate......
  • 当代码遇上“意外”:Python中的异常引发艺术
    引言异常处理是软件开发不可或缺的一部分。良好的异常管理不仅能够提升程序的稳定性与可靠性,还能显著改善用户体验。在Python中,“异常的引发”是指主动抛出一个错误信息,以通知调用者当前操作出现了问题。掌握这一技巧,对于编写高效、可维护的代码至关重要。基础语法介绍在Python......
  • Python 入门教程(3)基础知识 | 3.2、数据类型、变量与常量
    文章目录一、数据类型、变量与常量1、数据类型2、变量3、常量一、数据类型、变量与常量1、数据类型Python的数据类型可以分为不可变类型和可变类型。不可变类型包括整数、浮点数、布尔值和元组,一旦创建,其值就不能改变。可变类型包括列表、字典和集合,它们的值可以......
  • Python中的“Try...Except...Finally”:掌握异常处理的艺术
    在编程的世界里,错误与异常就像是旅途中的迷雾,虽然不可避免,但通过正确的导航工具,我们可以安全地穿越。Python作为一种广泛使用的编程语言,提供了丰富的工具来帮助我们处理这些异常情况,其中之一便是“Try...Except...Finally”结构。本文将带你深入了解这一机制的核心概念、实际应用以......
  • 强!推荐一款Python开源自动化脚本工具:AutoKey!
    1、前言在数字化时代,自动化工具成为了提升工作效率和生产力的重要手段。Python作为一种广泛使用的编程语言,以其强大的功能和易用性受到许多开发者的青睐。而今天给大家推荐一款开源的自动化脚本工具:AutoKey。结合Python的强大编程能力与AutoKey的任务自动化特性,用户可以高效地......
  • Python项目虚拟环境(超详细讲解)
    课程推荐我的个人主页:......
  • 【Python爬虫系列】_016.关于登录和验证码
    我的个人主页:......
  • 使用 Python 实现网络设备的自动发现
    以下是使用Python实现网络设备自动发现的一种方法:一、使用scapy库进行网络扫描scapy是一个强大的网络数据包处理库,可以用来发送和接收各种网络数据包,进行网络探测。1.安装scapy库:pipinstallscapy2.示例代码:fromscapy.allimport*defdiscover_devices(): ......