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

文章目录

  • 介绍
  • 技术要点
    • 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):# 构造带有翻页参数的URLpage_url = f'{url}?start={page}'# 打开 URLdriver.get(page_url)# 获取页面 HTMLhtml = driver.page_sourcesoup = 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部电影# 构造带有翻页参数的URLpage_url = f'{url}?start={page}'# 打开 URLdriver.get(page_url)# 获取页面 HTMLhtml = driver.page_sourcesoup = 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.hqwc.cn/news/8260.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用docker搭建mysql集群

一、技术架构 1、架构图 2、解说 mysql_1、mysql_2、mysql_3是一组主从模式,同理mysql_4、mysql_5、mysql_6也是一组主从模式从上面的图可以看出mysql_1和mysql_4是主节点,可以进行增删改查操作,但是子几点只能查询操作如果mysql_1节点出现问题了&#xff0c;有mysql_4节点组…

Android Binder通信原理(七):java 下的C-S

源码基于&#xff1a;Android R 0. 前言 在之前的几篇博文中&#xff0c;对Android binder 的通信原理进行的深入的剖析&#xff0c;这些博文包括&#xff1a;binder 简介、servicemanager启动、service注册、service获取、Java 端的service 注册和获取。 在前一文中&#xf…

五、卷积神经网络

文章目录 前言一、图像卷积1.1 不变性1.2 互相关运算1.3 卷积层1.4 互相关和卷积1.5 特征映射和感受野 二、填充和步幅2.1 填充2.2 步幅 三、多输入多输出通道3.1 多输入通道3.2 多输出通道3.3 11卷积层 四、汇聚层/池化层4.1 最大汇聚层与平均汇聚层4.2 填充和步幅4.3 多个通道…

Squid代理服务器

Squid代理服务器 一、Squid相关知识 1.功能 Squid 主要提供缓存加速、应用层过滤控制的功能。 2.工作机制 1&#xff0e;代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2&#xff0e;将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到…

4.Nginx缓存设置和CDN

文章目录 Nginx缓存设置设置缓存取消不需要内容的缓存查看nginx缓存数据 CDN概念工作原理 Nginx缓存设置 设置缓存 ##在yum配置文件中添加nginx在线源vim /etc/yum.repos.d/nginx.repo[nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/7/$base…

从零开始 Spring Boot 59:Hibernate 日志

从零开始 Spring Boot 59&#xff1a;Hibernate 日志 图源&#xff1a;简书 (jianshu.com) Hibernate 支持多种日志模块&#xff0c;本文介绍如何在 Spring Boot 中使用 Log4j2记录 Hibernate 日志。 实际上本文是我在写上篇文章时遇到的各种坑和最终解决的记录。 首先需要添加…

【HTTP 协议1】图文详解 HTTP 请求和应答报文

文章目录 前言一、认识 HTTP 协议1, 什么是 HTTP 协议2, HTTP 协议的报文格式 二、HTTP 请求报文1, 认识方法1.1, GET 和 POST 辨析(重点)1.2, 其他方法 2, 认识 URL3, 认识 Header3.1, Host3.2, Content-Length3.3 Content-Type3.4, User-Agent3.5, Referer3.6, Cookie(重点) …

力扣单调栈专题 739. 每日温度 496.下一个更大元素I 503.下一个更大元素II 42. 接雨水 84.柱状图中最大的矩形 步骤及C++实现 总结

文章目录 739. 每日温度496.下一个更大元素 I503.下一个更大元素II方法一 数组拼接方法二 模拟遍历两边nums 42. 接雨水双指针 暴力法双指针优化单调栈 84.柱状图中最大的矩形暴力解法双指针解法单调栈 总结 739. 每日温度 暴力解法&#xff0c;双层for循环&#xff0c;时间复杂…

如何在 MATLAB 中进行图像分割(matlab仿真与图像处理系列第7期)

在 MATLAB 中进行图像分割有多种方法,下面介绍一些常用的方法: 基于阈值的二值化分割这是一种最简单的分割方法,将图像分为两个部分:背景和前景。其主要思想是,选择一个阈值,将图像中的像素值与阈值进行比较,将像素值大于阈值的像素标记为前景(白色),将像素值小于阈值…

17. 订单金额趋势分析

文章目录 题目需求思路一实现一实现二&#xff1a;使用 over(range)学习链接题目来源 题目需求 查询截止每天的最近3天内的订单金额总和以及订单金额日平均值&#xff0c;保留两位小数&#xff0c;四舍五入。 最近三天 的业务逻辑通常是基于当天往前推2天 期望结果如下&#x…

归并排序的具体实现过程

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《算法详解》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心…

【JavaEE初阶】CSS

摄影分享~ 文章目录 一.CSS基本规范1. CSS基本语法规范2.CSS选择器 二.CSS常用属性1. 字体属性2.文本属性3.背景属性4.圆角矩形5.元素的显示模式块级元素行内元素 6.盒子模型边框内边距外边距 7.弹性布局 一.CSS基本规范 层叠样式表。(Cascading Style Sheets) CSS 能够对网页…