📌  相关文章
📜  如何在Python使用Selenium抓取多个页面?

📅  最后修改于: 2022-05-13 01:55:26.725000             🧑  作者: Mango

如何在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()

输出:

输出文件。

单击此处下载输出文件。