爬虫入门指南(7):使用Selenium和BeautifulSoup爬取豆瓣电影Top250实例讲解【爬虫小白必看】

news2024/10/7 18:24:08

文章目录

  • 介绍
  • 技术要点
    • Selenium
    • BeautifulSoup
    • Openpyxl
  • 实现步骤:
    • 导入所需库
    • 设置网页URL和驱动路径
    • 创建 ChromeDriver 服务
    • 配置 ChromeDriver
    • 创建 Excel 文件
    • 爬取数据
    • 关闭浏览器
    • 保存 Excel 文件
  • 完整代码
  • 导出的excel 效果图
  • 未完待续....

介绍

在本篇博客中,我们将使用 Python 的 Selenium 和 BeautifulSoup 库来实现一个简单的网页爬虫,目的是爬取豆瓣电影TOP250的数据,并将结果保存到Excel文件中。
使用Selenium和BeautifulSoup爬取豆瓣电影Top250实例讲解

技术要点

技术要点

Selenium

Selenium 是一个自动化测试工具,可以模拟用户在浏览器中的交互操作。我们将使用 Selenium 来打开网页、获取网页源码。

BeautifulSoup

BeautifulSoup 是一个用于解析HTML和XML文档的Python库。我们将使用 BeautifulSoup 来解析网页源码,提取需要的信息。

Openpyxl

Openpyxl 是一个用于读写 Excel 文档的库。我们将使用 Openpyxl 来创建一个 Excel 文件,并将爬取得到的数据保存到 Excel 文件中。

实现步骤:

导入所需库

我们需要导入 Selenium 的 webdriver 模块和 chrome.service 模块,以及 BeautifulSoup 和 openpyxl:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup
import openpyxl

设置网页URL和驱动路径

在代码中,我们需要设置要爬取的网页URL和 ChromeDriver 的路径:

url = 'https://movie.douban.com/top250'
driver_path = "chromedriver"  // 设置成你的路径 

请替换 chromedriver 为您本地 ChromeDriver 的路径。

创建 ChromeDriver 服务

我们需要创建一个 ChromeDriver 服务,并指定 ChromeDriver 的路径:

service = Service(driver_path)

配置 ChromeDriver

我们需要配置 ChromeDriver,使用 headless 模式(无界面模式)打开浏览器,这样可以加快爬取速度:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(service=service, options=options)

创建 Excel 文件

我们将使用 openpyxl 创建一个 Excel 文件,并设置一个名为 ‘豆瓣电影TOP250’ 的工作表,并添加表头:

wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = '豆瓣电影TOP250'
sheet['A1'] = '电影'
sheet['B1'] = '影评'

爬取数据

我们使用循环来处理每一页的数据。在每一页中,我们执行以下步骤:

  • 构造带有翻页参数的URL
  • 打开 URL
  • 获取页面 HTML
  • 使用 BeautifulSoup 解析网页
  • 提取电影名称和影评
  • 将数据写入 Excel 文件
row_index = 2  # 从第二行开始写入数据

for page in range(0, 250, 25):
    # 构造带有翻页参数的URL
    page_url = f'{url}?start={page}'

    # 打开 URL
    driver.get(page_url)

    # 获取页面 HTML
    html = driver.page_source

    soup = BeautifulSoup(html, 'html.parser')
    movies = soup.find_all('div', class_='hd')

    for movie in movies:
        name = movie.a.span.text.strip()

        quote = movie.find_next('span', class_='inq')  # 查找下一个兄弟节点中的 <span class="inq">元素
        if quote:
            quote_text = quote.text.strip()
        else:
            quote_text = ''

        sheet.cell(row=row_index, column=1, value=name)
        sheet.cell(row=row_index, column=2, value=quote_text)
        row_index += 1

关闭浏览器

爬取完成后,我们需要关闭浏览器切记

driver.quit()

保存 Excel 文件

最后,我们保存 Excel 文件,并命名为 ‘豆瓣电影TOP250.xlsx’:

wb.save('豆瓣电影TOP250.xlsx')

至此,我们已经完成了整个代码的讲解了

完整代码

from selenium import webdriver  # 导入 Selenium 库中的 webdriver 模块,用于驱动浏览器进行自动化操作
from selenium.webdriver.chrome.service import Service  # 导入 Selenium 库中的 Chrome 服务模块,用于启动 ChromeDriver
from bs4 import BeautifulSoup  # 导入 BeautifulSoup 库,用于解析HTML页面
import openpyxl  # 导入 openpyxl 库,用于读写Excel文件

url = 'https://movie.douban.com/top250'  # 豆瓣电影TOP250的URL地址
driver_path = ""  # ChromeDriver的路径,需要设置为您本地的ChromeDriver路径

# 创建 ChromeDriver 服务
service = Service(driver_path)

# 配置 ChromeDriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 设置Chrome无头模式,即在后台运行浏览器,不弹出窗口
driver = webdriver.Chrome(service=service, options=options)  # 创建 ChromeDriver 实例

wb = openpyxl.Workbook()  # 创建一个新的Excel工作簿
sheet = wb.active  # 获取活动的工作表
sheet.title = '豆瓣电影TOP250'  # 设置工作表的名称为"豆瓣电影TOP250"
sheet['A1'] = '电影'  # 在第一行第一列(A1单元格)写入"电影"
sheet['B1'] = '影评'  # 在第一行第二列(B1单元格)写入"影评"

row_index = 2  # 行索引,从第二行开始写入数据

for page in range(0, 250, 25):  # 循环遍历每页,每页显示25部电影
    # 构造带有翻页参数的URL
    page_url = f'{url}?start={page}'

    # 打开 URL
    driver.get(page_url)

    # 获取页面 HTML
    html = driver.page_source

    soup = BeautifulSoup(html, 'html.parser')  # 使用BeautifulSoup解析HTML页面
    movies = soup.find_all('div', class_='hd')  # 查找所有class为'hd'的<div>元素,即电影信息所在的区块

    for movie in movies:
        name = movie.a.span.text.strip()  # 提取电影名称

        quote = movie.find_next('span', class_='inq')  # 查找下一个兄弟节点中的 <span class="inq">元素,即电影的影评
        if quote:
            quote_text = quote.text.strip()  # 若存在影评,则提取影评文本
        else:
            quote_text = ''  # 若不存在影评,则设置为空字符串

        sheet.cell(row=row_index, column=1, value=name)  # 在当前行的第一列写入电影名称
        sheet.cell(row=row_index, column=2, value=quote_text)  # 在当前行的第二列写入影评文本
        row_index += 1  # 行索引递增,准备写入下一行数据

# 关闭浏览器
driver.quit()

wb.save('豆瓣电影TOP250.xlsx')  # 将Excel文件保存为"豆瓣电影TOP250.xlsx"

导出的excel 效果图

爬取豆瓣电影Top250实例

未完待续…

未完待续....

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day976.如何安全、快速地接入OAuth 2.0? -OAuth 2.0

如何安全、快速地接入OAuth 2.0&#xff1f; Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于如何安全、快速地接入OAuth 2.0&#xff1f;的内容。 授权服务将 OAuth 2.0 的复杂性都揽在了自己身上&#xff0c;这也是授权服务为什么是 OAuth 2.0 体系的核心的原因之…

企业为什么纷纷推崇数字化管理?

企业提倡或推崇数字化管理&#xff0c;通常是因为几个原因&#xff1a; 效率和生产力&#xff1a;数字管理系统简化流程并自动执行重复任务&#xff0c;从而提高效率和生产力。数字工具可以更快地输入、检索和分析数据&#xff0c;减少人工工作和人为错误。这种效率使企业能够在…

STM32速成笔记—Flash闪存

文章目录 一、Flash简介二、STM32F1的Flash三、Flash操作步骤四、程序设计4.1 读取数据4.2 写入数据&#xff08;不检查&#xff09;4.3 写入数据&#xff08;检查&#xff09; 五、注意事项 一、Flash简介 快闪存储器&#xff08;flash memory&#xff09;&#xff0c;是一种…

物理与IP环境的重要性:打造稳定可靠的亚马逊测评环境

在亚马逊平台上进行测评补单、撸卡和撸货等活动&#xff0c;首要问题是确保环境的安全性和稳定性。一个稳定的环境是进行测评和撸卡的基础&#xff0c;如果无法解决安全性问题&#xff0c;那么从事这些项目就不值得。在环境技术研发领域已经有六七年的经验&#xff0c;在早期测…

红利期已过?2023跨境电商还吃香吗?亚马逊还能做吗?

2022年&#xff0c;由于疫情反复和外部因素的影响&#xff0c;跨境电商的情况并不乐观。但这并不意味着跨境电商已经走到了绝境。随着贸易全球化的深入发展&#xff0c;平台规则不断完善&#xff0c;国家相继出台最新的扶持政策&#xff0c;为跨境电商企业带来了更多的发展机遇…

Spring Boot 中的 Zookeeper 分布式锁

Spring Boot 中的 Zookeeper 分布式锁 分布式锁是分布式系统中常用的一个同步工具&#xff0c;它可以在多个进程之间协调访问共享资源&#xff0c;避免数据不一致或重复处理。在分布式环境中&#xff0c;由于网络通信的延迟和节点故障等原因&#xff0c;传统的锁机制无法满足需…

MES与ERP系统的生产计划管理到底有什么不同?

MES 的生产计划管理与 ERP 的生产计划管理到底有什么不同&#xff1f; 生产计划管理是企业发展的重要一环&#xff0c;对于提升企业生产效率&#xff0c;提高客户满意度&#xff0c;降低成本&#xff0c;提高客户满意度等方面都有重要意义。 我们首先来看MES和ERP生产计划管理…

Cisco Catalyst 9000 Series Switches, IOS-XE Release Dublin-17.11.1 ED

Cisco Catalyst 9000 Series Switches, IOS-XE Release Dublin-17.11.1 ED Cisco Catalyst 9000 交换产品系列 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-catalyst-9000/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;…

Vox-E: Text-guided Voxel Editing of 3D Objects(3D目标的文本引导体素编辑)

Vox-E: Text-guided Voxel Editing of 3D Objects &#xff08;3D目标的文本引导体素编辑&#xff09; Paper&#xff1a;https://readpaper.com/paper/1705264952657440000 Code&#xff1a;http://vox-e.github.io/ 原文链接&#xff1a;Vox-E: 3D目标的文本引导体素编辑 &…

如何写出高效的软件测试用例,测试人都用得到

要编写出高效的测试用例&#xff0c;需要搞清楚什么是测试用例&#xff0c;以及如何编写出高效的测试用例&#xff1f;接下来将从以下几个部分来进行展开 1、什么是测试用例 2、如何编写测试用例 一、什么是测试用例 测试用例 &#xff1a;为了特定目的而设计的由一组测试输…

【el-tree大量数据卡顿解决】el-tree利用懒加载解决大数据量卡顿问题,el-tree懒加载回显方法

描述 问题是这样&#xff1a;我的项目中&#xff0c;有一个角色管理的页面。以前的老代码&#xff0c;直接用el-tree渲染的树形结构&#xff0c;勾选设置对应的权限。其他的部门倒是还好&#xff0c;但是涉及到老板的部门设置的时候&#xff0c;由于我们这边的权限太多&#x…

ESP32开发:1、环境搭建(基于vscode+ESP-IDF)

1、ESP-IDF ESP-IDF提供操作ESP32芯片的API函数&#xff0c;供用户编写的用户程序调用。当用户程序编写好后&#xff0c;ESP-IDF需要借助一系列编译工具才能将用户程序API函数编译成能运行在ESP32上的二进制文件。 如上图所示这个1个G左右大的压缩包就是ESP-IDF。如果电脑上已经…

sslTrus (RSA) OV CA

sslTrus (RSA) OV CA品牌证书是建立在Sectigo CA机构的一种面向中国大陆的PKI定制中级根证书服务&#xff0c;OCSP国内本地网络优化&#xff0c;更适合中国网络。采取的Sectigo根证书建立的信任&#xff0c;更是完整。 sslTrus (RSA) OV CA可以选择&#xff1a;单域名、通配符…

生产级Redis Cluster部署(4.0.10版本)

生产级Redis Cluster部署 环境准备 主机名 IP地址 端口 描述 redis-master 192.168.1.51 7000 redis-master01 7001 redis-master02 7002 redis-master03 redis-slave 192.168.1.52 8000 redis-slave01 8001 redis-slave02 8002 redis-slave03 初始化…

代码随想录二刷day42 | 动态规划之背包问题 416. 分割等和子集

day42 416. 分割等和子集确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 416. 分割等和子集 题目链接 解题思路&#xff1a; 这是一维的背包问题 只有确定了如下四点&#xff0c;才能把01背包问题套到本题上来。 背包的体积为sum / 2背包要…

Java 实现快慢指针法返回链表的中间结点

一、思路 这里分为链表结点个数是 奇数 和 偶数 两种情况。 如果是奇数&#xff0c;中间结点只有一个&#xff0c;返回即可&#xff1b;如果是偶数&#xff0c;中间结点则有两个&#xff0c;这里要求返回第二个。 上述图片展示的就是奇数的情况&#xff0c;此时中间结点就是…

找不到“$libdir/postgis-X.X“问题解决方案

背景&#xff1a; 数据库从postgresql-11.9 升级到11.20版本&#xff0c;11.20版本采用了docker镜像 postgis/postgis:11-3.3 (截止20230703实际对应的版本为pg11.20postgis3.3) 升级版本&#xff0c;使用了原来的data&#xff0c;主要版本不变&#xff0c;次要版本升级&#…

文档管理系统是业迈向数字化办公的新时代

随着信息技术的不断发展&#xff0c;企业数字化办公已成为越来越多企业的选择。在数字化办公中&#xff0c;文档管理系统是一个非常重要的组成部分&#xff0c;可以帮助企业打破时空限制&#xff0c;提高工作效率和质量&#xff0c;推动企业向数字化办公的新时代迈进。 什么是…

力扣 39. 组合总和

题目来源&#xff1a;https://leetcode.cn/problems/combination-sum/description/ C题解&#xff1a; 递归法。递归前对数组进行有序排序&#xff0c;可方便后续剪枝操作。 递归函数参数&#xff1a;定义两个全局变量&#xff0c;二维数组result存放结果集&#xff0c;数组pa…

当使用POI打开Excel文件遇到out of memory时该如何处理?

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 当我们开发处理Excel文件时&#xff0c;Apache POI 是许多人首选的工具。但是&#xff…