文章目录
介绍
在本篇博客中,我们将使用 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:
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 inrange(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 服务模块,用于启动 ChromeDriverfrom 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 inrange(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 效果图
未完待续…
版权归原作者 全栈若城 所有, 如有侵权,请联系我们删除。