Python爬虫实战-批量爬取豆瓣电影排行信息

大家好,我是python222小锋老师。

近日锋哥又卷了一波Python实战课程-批量爬取豆瓣电影排行信息,主要是巩固下Python爬虫基础

视频版教程:

Python爬虫实战-批量爬取豆瓣电影排行信息 视频教程_哔哩哔哩_bilibiliPython爬虫实战-批量爬取豆瓣电影排行信息 视频教程作者:小锋老师官网:www.python222.com, 视频播放量 344、弹幕量 0、点赞数 13、投硬币枚数 7、收藏人数 18、转发人数 0, 视频作者 java1234官方, 作者简介 公众号:java1234 微信:java9266,相关视频:Python爬虫实战-批量爬取下载网易云音乐,Python爬虫实战-批量爬取美女图片网下载图片 视频教程,这个视频可能会得罪很多人..终极爬虫JS逆向教程!突破反爬虫防御的终极指南,从入门到实战,就没有爬不了的网站!,【Python爬虫教程】你敢学我就敢发!300集从入门到入狱(完整版)胆小勿学!全程干货无废话,学完即可兼职接单!,2024 一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 【无废话版】,【Python爬虫】三分钟教你免费下载全网VIP音乐,音乐一键下载免费听,告别付费时代,小白也能学得会,附源码!,【Python爬虫】手把手教你爬取百度文库PPT文档,破解百度文库收费限制,下载PPT再也没花过钱!,【B站第一】清华大佬196小时讲完的Python入门学习教程!从小白到大神!整整300集,全干货无废话,学完即可就业!允许白嫖!!,【2023百度文库VIP文档PPT免费下载】Python白嫖百度文库付费VIP文档,破解百度文库收费限制,零基础白嫖教程!!!,【Python教程】一分钟轻松实现观影自由,教你用Python免费看电影,代码可分享 | Python爬虫教程icon-default.png?t=N7T8https://www.bilibili.com/video/BV1aN411u7o5/

爬虫目标网站:

https://movie.douban.com/top250

经过分析,一共10页,第二页,第二页,...,第10页的规律是:

分页规律 第N页
    https://movie.douban.com/top250?start=25*(N-1)&filter=

爬取网页,解析数据,处理数据,我们最终把数据存入Excel。

因为涉及到分页,所以我们要对解析url,解析网页,导出Excel代码,进行封装,方便复用。

解析请求,爬取网页方法:

def crawl_html(url):
    """
        解析请求,爬取网页
    :param url: 请求地址
    :return: 网页源码
    """
    response = requests.get(url=url, headers=headers)
    return response.text

解析网页源码方法:

def parse_html(html):
    """
        解析网页源码
    :param html: 页面源码
    :return: 页面 电影对象信息列表   [ {'':''},{},{}  ]
    """
    # 实例化soup
    soup = BeautifulSoup(html, "lxml")
    # 获取所有电影DOM
    movie_list = soup.select("ol.grid_view li")
    # print(movie_list)
    # 电影数据对象列表
    movie_data_list = []
    for movie in movie_list:
        try:
            rank = movie.select_one("div.pic em").text  # 获取排名
            title = movie.select_one("div.info span.title").text  # 获取电影名称
            info = movie.select_one("div.bd p").text.strip()  # 获取电影描述信息
            rating_num = movie.select_one("div.star span.rating_num").text  # 获取评分
            comment_count = movie.select("div.star span")[3].text.replace("人评价", "")  # 获取评论数
            quete_dom = movie.select_one("p.quote span.inq")
            quote = ""
            if quete_dom:
                quote = quete_dom.text
            # quote = movie.select_one("p.quote span.inq").text  # 获取电影描述
            movie_data_list.append({
                "rank": rank,
                "title": title,
                "info": info,
                "rating_num": rating_num,
                "comment_count": comment_count,
                "quote": quote
            })
        except:
            print(movie.select_one("div.pic em").text, "异常", traceback.print_exc())
            continue
    return movie_data_list

导出Excel方法:借助pandas库

def export_excel(datas):
    """
        导出数据到Excel
    :param datas: 数据
    :return:
    """
    df = pd.DataFrame(datas)
    df.to_excel("豆瓣电影TOP250.xlsx")

完整源码参考:具体代码解释,参考帖子顶部的视频教程。

"""
    豆瓣电影 Top 250 抓取电影信息,存到excel里面
    使用requests爬取网页,使用bs4解析数据,使用pandas将数据写入Excel
    目标网页:https://movie.douban.com/top250
    分页规律 第N页
    https://movie.douban.com/top250?start=25*(N-1)&filter=
    作者:小锋老师
    官网:www.python222.com
"""

import traceback
import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

url = "https://movie.douban.com/top250?start=0&filter="


def crawl_html(url):
    """
        解析请求,爬取网页
    :param url: 请求地址
    :return: 网页源码
    """
    response = requests.get(url=url, headers=headers)
    return response.text


def parse_html(html):
    """
        解析网页源码
    :param html: 页面源码
    :return: 页面 电影对象信息列表   [ {'':''},{},{}  ]
    """
    # 实例化soup
    soup = BeautifulSoup(html, "lxml")
    # 获取所有电影DOM
    movie_list = soup.select("ol.grid_view li")
    # print(movie_list)
    # 电影数据对象列表
    movie_data_list = []
    for movie in movie_list:
        try:
            rank = movie.select_one("div.pic em").text  # 获取排名
            title = movie.select_one("div.info span.title").text  # 获取电影名称
            info = movie.select_one("div.bd p").text.strip()  # 获取电影描述信息
            rating_num = movie.select_one("div.star span.rating_num").text  # 获取评分
            comment_count = movie.select("div.star span")[3].text.replace("人评价", "")  # 获取评论数
            quete_dom = movie.select_one("p.quote span.inq")
            quote = ""
            if quete_dom:
                quote = quete_dom.text
            # quote = movie.select_one("p.quote span.inq").text  # 获取电影描述
            movie_data_list.append({
                "rank": rank,
                "title": title,
                "info": info,
                "rating_num": rating_num,
                "comment_count": comment_count,
                "quote": quote
            })
        except:
            print(movie.select_one("div.pic em").text, "异常", traceback.print_exc())
            continue
    return movie_data_list


def export_excel(datas):
    """
        导出数据到Excel
    :param datas: 数据
    :return:
    """
    df = pd.DataFrame(datas)
    df.to_excel("豆瓣电影TOP250.xlsx")


datas = []  # 所有电影数据
for i in range(1, 11):  # 遍历10页
    start = 25 * (i - 1)
    url = f"https://movie.douban.com/top250?start={start}&filter="
    print(url)
    movie_data_list = parse_html(crawl_html(url))
    datas += movie_data_list

export_excel(datas)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/167642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光伏拉晶厂RFID智能化生产工序管理

一、项目背景 随着全球能源短缺和气候变暖的挑战日益突显,清洁能源已成为国内能源发展的主要目标之一,作为清洁能源的重要组成部分,光伏行业在过去几十年中取得了巨大的发展,成为我国的战略性新兴产业之一。在智能制造的大环境下…

Git 提交竟然还能这么用?

大家好,我是鱼皮。Git 是主流的代码版本控制系统,是团队协作开发中必不可少的工具。 之前已经给大家分享过 Git / GitHub 的学习指南,感兴趣的同学可以先看视频了解:https://www.bilibili.com/video/BV1KZ4y1e7cG。 这篇文章&am…

企业微信机器人定时发送图文信息,后续无需人工操作

企业微信群机器人是企业微信的内置功能,可以理解为是一个群提醒通知工具,接收数据并自动发送信息到企业微信群中。 数环通实现打通定时器和企业微信机器人的对接,定时执行自动化流程,无需人工干预,实现工作流程自动化&…

Thales安全解决方案:国家网络安全的关键

随着信息技术的飞速发展,网络安全问题日益凸显。在这个背景下,Thales安全解决方案正成为提高国家网络安全的关键。本文将探讨Thales安全解决方案如何为国家网络安全保驾护航。 一、Thales安全解决方案概述 Thales安全解决方案是一种全方位的网络安全防护…

《微信小程序开发从入门到实战》学习十八

3.3 开发创建投票页面 3.3.5 数据的双向传递 通过上一小节的代码和预览效果可以看到使用时间函数可以将视图层传递到逻辑层。 视图层数据由小程序管理,逻辑层通常保存在data对象,必须由开发者自己管理。 微信开发工具的AppData的面板可以实时查看到页…

使用 uWSGI 部署 Django 应用详解

概要 部署 Django 应用到生产环境是一个至关重要的步骤,其中选择合适的 WSGI 服务器对于确保应用的稳定性和性能至关重要。uWSGI 是一个流行的选择,它不仅高效、轻量,还非常灵活。本文将详细介绍如何使用 uWSGI 来部署 Django 应用&#xff…

【Linux】C文件系统详解(四)——磁盘的物理和抽象结构

文章目录 磁盘结构磁盘物理结构磁盘的具体物理结构磁盘结构的逻辑抽象 文件系统BootBlockSuperBlockGroupDescriptorTableinode tableDataBlocksinodeBitmapblockBitmaplinux中的inode 和文件名如何理解文件的增删查改删 补充细节1.如果文件误删了,我们该怎么办?2.inode确定分…

电脑监控软件都有哪些,哪款好用丨全网盘点

电脑监控软件是一种用于监视和控制计算机的软件工具,可以帮助企业和个人了解计算机的使用情况,保护数据安全,提高工作效率等。 电脑监控软件都有哪些: 1、域之盾软件 这是一款功能强大的电脑监控软件,可以实时监控电脑…

python绘图常见问题及解决方法总结

文章目录 1. 多个图片绘制到一起时出现title和xstick重合 1. 多个图片绘制到一起时出现title和xstick重合 fig, axes plt.subplots(6, 2, figsize(20, 40)) # Adjust the layout padding plt.subplots_adjust(hspace0.5, wspace0.4) # Plotting scatter plots for Tiu and ws_…

详解使用asyncio实现playwright并发操作(复制源码即可运行)

asyncio实现并发 我们可以使用asyncio来解决palywright中并发的问题,asyncio即Asynchronous I/O是python一个用来处理并发(concurrent)事件的包,是很多python异步架构的基础,多用于处理高并发网络请求方面的问题。给大家举一个经典的应用场景…

开源vs闭源大模型如何塑造技术的未来?开源模型的优劣势未来发展方向

开源vs闭源大模型如何塑造技术的未来?开源模型的优劣势&未来发展方向 写在最前面一、开源与闭源:定义与历史背景开源和闭源的定义开源大模型:社区驱动的创新 二、开源和闭源的优劣势比较开源大模型(瓶颈)数据&…

yolov8使用opencv2实时检测,两种物品,左上角显示信息

效果为: 左上角显示 帧率:FPS 序列号:SN 两种物品的检测数量和总数 可以应用于工业检测 import cv2 from ultralytics import YOLO from cv2 import getTickCount, getTickFrequency # 加载 YOLOv8 模型 model YOLO("weights/yolov8s.…

微信小程序云开发 微信支付功能 逻辑+踩坑

前置条件 首先开通微信支付商户号 然后小程序后台里关联商户号 然后在开发者工具里申请api权限 云开发》设置》其他设置》微信支付配置 申请一下权限和绑定 显示已通过即可。 逻辑 首先用户点击支付按钮,就会触发unlock() 在unlock函数中创建新订单&#xff…

iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS

文章目录 一、前言二、VMwareMacOS镜像2.1、先下载vmware-workstation2.2、再下载macOS Big Sur(11.6) 三、图解安装过程3.1、双击VMware-WorkStation Pro图标 四、总结 一、前言 为什么会有虚拟机这种东西?它存在的意义是什么[能解决什么问题]?哈哈~你以…

解锁数据分析的神器:ChatGPT引领人工智能革命

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在当今数字化时代,数据分析成为决策…

数据结构(7-2广度~~7-15)所有代码

7-2 迷宫-广度策略 一个陷入迷宫的老鼠如何找到出口的问题。老鼠希望系统性地尝试所有的路径之后走出迷宫。如果它到达一个死胡同,将原路返回到上一个位置,尝试新的路径。在每个位置上老鼠可以向八个方向运动,顺序是从正东开始按照顺时针进行…

【设计模式】结构型设计模式

结构型设计模式 文章目录 结构型设计模式一、概述二、适配器模式(Adapter Pattern)2.1 类适配器模式2.2 对象适配器模式2.3 接口适配器模式2.4 小结 三、桥接模式(Bridge Pattern)四、装饰器模式(Decorator Pattern&am…

《微信小程序开发从入门到实战》学习二十一

3.3 开发创建投票页面 3.3.9 使用picker选择器组件 使用picker选择器组件增加一个设置截止时间的功能。picker是一个从底部弹出的滚动选择器组件。picker通用属性如下: mode 选择器类型(selector、multiSelector、time、date、region) disabled …

USB转CAN的使用说明

前言 USB转CAN是将 TTL 信号转换为 CAN 信号的模块。采用串口作为嵌入式系统的接口,数据传输简单,无需要学习 CAN 协议,缩短开发周期,降低开发成本。模块兼容 3.3V、5V 电源,搭载一个 32 位的 STM32 处理芯片和一个 C…

buildadmin+tp8表格操作(7.1)表格的事件监听(el-table中的事件)

因为buildAdmin是封装的 el-table的组件,所以el-table中的事件, 也是可以使用的, 两者有几个事件是有共同的(比如 双击事件), 这时可以根据自己的需要自行选择 以下代码是 buildadmin 使用 el-table中的事…