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

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

时间:2024-09-18 10:13:24浏览次数:9  
标签:info subs python 电影 爬取 df csv TOP250

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

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

爬取的目标网址是:https://movie.douban.com/top250

咱们以目标为驱动,以兴趣为导向,先来看下爬虫程序运行后得到的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源码及数据【python爬虫案例】利用python爬虫爬取豆瓣电影评分TOP250排行数据


标签:info,subs,python,电影,爬取,df,csv,TOP250
From: https://www.cnblogs.com/wangnp/p/18412433

相关文章

  • python 冒号(:)的使用
    Python是一种流行的编程语言,其中一个非常独特的语法特点是使用冒号(:)来表示代码块。这个冒号语法在Python中起到了类似于Java中分号的作用,用于定义一个可执行的代码块。在这个代码块中,可以使用冒号来定义变量、函数和类等元素。同时,冒号在Python中还具有另一种特殊的用法,即冒号等......
  • 五个python常用运维脚本
    一、用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径#!/usr/bin/env pythonimportosforroot,dirs,filesin os.walk('/tmp'):  fornameinfiles:    print(os.path.join(root,name))os.walk()原型为:os.walk(top,topdown=True,onerror=None......
  • windows定时执行python程序
    先写个bat脚本,执行Python程序::根据实际情况修改Python解释器的路径setPYTHON=D:\python\python.exesetCODE_DIR=D:\code\projectcd/d"%CODE_DIR%"::启动Python程序echoRunningmain.py...%PYTHON%main.py>nohup.log2>&1echoAllscriptscomplete......
  • OpenCV Python 深度指南
    OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉库,它包含了大量的图像处理和机器视觉算法。OpenCV支持多种编程语言,包括C++和Python,其中Python接口因其易用性和灵活性而受到广泛欢迎。本指南将覆盖以下几个方面:OpenCV简介OpenCV安装与配置图像基础视频......
  • Python OpenCV精讲系列 - 高级图像处理技术(七)
    ......
  • Python 进阶 03 网络编程
    网络编程概述网络编程,又称套接字编程(Socket编程),是实现不同计算机上运行的程序间进行数据交互的关键技术。它允许程序通过网络发送和接收数据,无论这些程序是运行在同一台机器上还是分布在不同地理位置的计算机上。网络编程是现代软件开发中不可或缺的一部分,广泛应用于Web开发、......
  • 基于python+Django的学生成绩管理系统(源码+vue+前后端分离)
    收藏关注不迷路!!......
  • 10_Python流程控制_循环
    循环循环是控制程序重复执行特定代码块的关键结构。Python提供了几种不同的循环结构,以满足不同的编程需求。While循环while循环会重复执行一个代码块,只要指定的条件为真。适用情况:不清楚具体的循环次数,或者当条件一直为真时一般用while。注意:条件中的变量在while迭代......
  • Python脚本生成可执行文件
    将python文件生产可执行文件,可以在其他不同的环境下使用,即使没有安装python的环境也可以使用,避免了python文件或脚本需要在安装了python的环境下才能使用,提高了便利性一.安装pyinstaller    将python脚本生成可执行文件,需要通过pyinstaller工具,需提前安装,安装方法为......
  • D10【python接口自动化学习】-python基础之内置数据类型
    day10列表学习日期:20240917学习目标:内置数据类型--列表:如何处理同类数据?学习笔记:列表的定义创建列表#创建列表colours=['red','blue','green']print(colours)#将列表打印出来['red','blue','green']print(type(colours))#<class&#......