前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫入门指南(7):使用Selenium和BeautifulSoup爬取豆瓣电影Top250实例讲解【爬虫小白必看】

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

作者头像
全栈若城
发布2024-02-29 19:01:14
2190
发布2024-02-29 19:01:14
举报
文章被收录于专栏:若城技术专栏若城技术专栏

介绍

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

技术要点

Selenium

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

BeautifulSoup

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

Openpyxl

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

实现步骤:

导入所需库

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

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup
import openpyxl

设置网页URL和驱动路径

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

代码语言:javascript
复制
url = 'https://movie.douban.com/top250'
driver_path = "chromedriver"  // 设置成你的路径 

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

创建 ChromeDriver 服务

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

代码语言:javascript
复制
service = Service(driver_path)

配置 ChromeDriver

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

代码语言:javascript
复制
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(service=service, options=options)

创建 Excel 文件

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

代码语言:javascript
复制
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = '豆瓣电影TOP250'
sheet['A1'] = '电影'
sheet['B1'] = '影评'

爬取数据

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

  • 构造带有翻页参数的URL
  • 打开 URL
  • 获取页面 HTML
  • 使用 BeautifulSoup 解析网页
  • 提取电影名称和影评
  • 将数据写入 Excel 文件
代码语言:javascript
复制
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

关闭浏览器

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

代码语言:javascript
复制
driver.quit()

保存 Excel 文件

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

代码语言:javascript
复制
wb.save('豆瓣电影TOP250.xlsx')

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

完整代码

代码语言:javascript
复制
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 效果图

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 技术要点
    • Selenium
      • BeautifulSoup
        • Openpyxl
        • 实现步骤:
          • 导入所需库
            • 设置网页URL和驱动路径
              • 创建 ChromeDriver 服务
                • 配置 ChromeDriver
                  • 创建 Excel 文件
                    • 爬取数据
                      • 关闭浏览器
                        • 保存 Excel 文件
                        • 完整代码
                        • 导出的excel 效果图
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档