如何在Python使用Selenium抓取多个页面?
众所周知, selenium是一种基于 Web 的自动化工具,可帮助我们自动化浏览器。 Selenium是一个开源测试工具,这意味着我们可以轻松地从互联网上下载并使用它。在Selenium的帮助下,我们还可以从网页中抓取数据。在这里,在本文中,我们将讨论如何使用selenium废弃多个页面。
从网页中抓取数据的方法有很多种,我们将讨论其中一种。循环页码是抓取数据的最简单方法。我们可以使用递增计数器将一页更改为另一页。很多次,我们的循环都会运行,程序将从网页中抓取数据。
首页网址:
https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=1
最后,只有页码会增加,如page=1, page=2 ... 现在,让我们看看第二页的 URL。
第二页网址:
https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=2
现在,让我们讨论一下方法
安装:
我们的第一步,在编写一行代码之前。我们必须安装selenium才能使用webdriver类。通过它我们可以实例化浏览器并从目标 URL 获取网页。
pip install selenium
一旦selenium安装成功。现在,我们可以进入下一步安装我们的下一个包。
下一个包是webdriver_manager,先安装吧,
pip install webdriver_manager
是的!我们完成了重要或必要软件包的安装
现在,让我们看看下面的实现:
- 在这个程序中,在 for 循环的帮助下,我们将废弃两个网页,因为我们只运行了两次 for 循环。如果我们想废弃更多的页面,那么我们可以增加循环次数。
- 将页面 URL 存储在字符串变量 page_url 中,并使用 for 循环计数器增加其页码计数。
- 现在,实例化 Chrome 网络浏览器
- 使用驱动程序对象在 Chrome 浏览器中打开页面 URL
- 现在,使用像find_elements_by_class_name方法这样的元素定位器从网页中抓取数据。此方法将返回元素类型的列表。我们将所有必要的数据存储在列表变量中,例如title、price、description和 rating 。
- 将所有数据存储为单个产品列表的列表。在 element_list 中,我们将存储这个结果列表。
- 最后,打印element_list 。然后关闭驱动程序对象。
Python3
# importing necessary packages
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
# for holding the resultant list
element_list = []
for page in range(1, 3, 1):
page_url = "https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=" + str(page)
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(page_url)
title = driver.find_elements_by_class_name("title")
price = driver.find_elements_by_class_name("price")
description = driver.find_elements_by_class_name("description")
rating = driver.find_elements_by_class_name("ratings")
for i in range(len(title)):
element_list.append([title[i].text, price[i].text, description[i].text, rating[i].text])
print(element_list)
#closing the driver
driver.close()
Python3
with xlsxwriter.Workbook('result.xlsx') as workbook:
worksheet = workbook.add_worksheet()
for row_num, data in enumerate(element_list):
worksheet.write_row(row_num, 0, data)
Python3
import xlsxwriter
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
element_list = []
for page in range(1, 3, 1):
page_url = "https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=" + str(page)
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(page_url)
title = driver.find_elements_by_class_name("title")
price = driver.find_elements_by_class_name("price")
description = driver.find_elements_by_class_name("description")
rating = driver.find_elements_by_class_name("ratings")
for i in range(len(title)):
element_list.append([title[i].text, price[i].text, description[i].text, rating[i].text])
with xlsxwriter.Workbook('result.xlsx') as workbook:
worksheet = workbook.add_worksheet()
for row_num, data in enumerate(element_list):
worksheet.write_row(row_num, 0, data)
driver.close()
输出:
将数据存储在 Excel 文件中:
现在,我们将使用xlsxwriter包将element_list 中的数据存储到 Excel 文件中。所以,首先,我们必须安装这个xlsxwriter包。
pip install xlsxwriter
一次安装完成。让我们看看简单的代码,通过它我们可以将元素列表转换为 Excel文件。
蟒蛇3
with xlsxwriter.Workbook('result.xlsx') as workbook:
worksheet = workbook.add_worksheet()
for row_num, data in enumerate(element_list):
worksheet.write_row(row_num, 0, data)
首先,我们正在创建一个名为result.xlsx的工作簿。之后,我们将考虑列表 单品为单排。在 Excel 文件中将列表枚举为一行,将其数据枚举为列,该文件从行号 0 和列号 0 开始。
现在,让我们看看它的实现:
蟒蛇3
import xlsxwriter
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
element_list = []
for page in range(1, 3, 1):
page_url = "https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=" + str(page)
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(page_url)
title = driver.find_elements_by_class_name("title")
price = driver.find_elements_by_class_name("price")
description = driver.find_elements_by_class_name("description")
rating = driver.find_elements_by_class_name("ratings")
for i in range(len(title)):
element_list.append([title[i].text, price[i].text, description[i].text, rating[i].text])
with xlsxwriter.Workbook('result.xlsx') as workbook:
worksheet = workbook.add_worksheet()
for row_num, data in enumerate(element_list):
worksheet.write_row(row_num, 0, data)
driver.close()
输出:
![](https://mangodoc.oss-cn-beijing.aliyuncs.com/geek8geeks/How_to_scrape_multiple_pages_using_Selenium_in_Python?_1.jpg)
输出文件。
单击此处下载输出文件。