
本文旨在指导开发者使用 Selenium Webdriver 和 CSS 选择器从 Patagonia 网站抓取女性夹克的产品信息,包括标题、URL、图片 URL、价格、评分和评论数量。文章将提供代码示例,并着重讲解如何编写简洁高效的 CSS 选择器,以及如何处理动态加载内容和数据清洗,最终将抓取的数据保存为 CSV 文件。
首先,确保你已经安装了以下依赖:
以下代码展示了如何使用 Selenium 和 CSS 选择器抓取 Patagonia 网站上的女性夹克信息,并将其保存为 CSV 文件。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import csv
# 配置 Chrome WebDriver
service = Service(executable_path='/path/to/chromedriver') # 替换为你的 chromedriver 路径
driver = webdriver.Chrome(service=service)
# 目标 URL
url = "https://www.patagonia.com/shop/womens"
driver.get(url)
# 用于存储产品信息的列表
product_data = []
def extract_product_data():
"""提取当前页面上的产品数据"""
products = driver.find_elements(By.CSS_SELECTOR, '#product-search-results > div.row.product-grid.load-more-present > div[class^="col"]')
for product in products:
try:
title = product.find_element(By.CSS_SELECTOR, 'div.product-tile__title > a > span').text
product_url = product.find_element(By.CSS_SELECTOR, 'div.product-tile__title > a').get_attribute('href')
image_url = product.find_element(By.CSS_SELECTOR, 'div.product-tile__image > a > img').get_attribute('src')
price = product.find_element(By.CSS_SELECTOR, 'div.product-tile__price').text
# 尝试获取评分和评论数量,如果不存在则设置为 None
try:
rating = product.find_element(By.CSS_SELECTOR, 'span.sr-only').get_attribute('aria-label')
review_count = product.find_element(By.CSS_SELECTOR, 'span.oc-rating-count').text.strip('()')
except NoSuchElementException:
rating = None
review_count = None
product_data.append([title, product_url, image_url, price, rating, review_count])
except NoSuchElementException as e:
print(f"Error extracting data from a product: {e}")
continue
def load_all_products():
"""滚动加载所有产品"""
while True:
try:
# 找到并点击 "加载更多" 按钮
load_more_button = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#product-search-results > div.row.product-grid.load-more-present > div.col-12.grid-footer > div > div > button'))
)
driver.execute_script("arguments[0].scrollIntoView({ behavior: 'auto', block: 'center' });", load_more_button)
load_more_button.click()
# 等待新内容加载 (可以根据实际情况调整等待时间)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#product-search-results > div.row.product-grid.load-more-present > div[class^="col"]:nth-child(24)'))
) # 假设每次加载 24 个产品
except (TimeoutException, NoSuchElementException):
# 如果没有 "加载更多" 按钮或加载超时,则停止加载
break
# 执行抓取流程
load_all_products()
extract_product_data()
# 保存数据到 CSV 文件
csv_file = "patagonia_womens_jackets.csv"
with open(csv_file, "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["product title", "product URL", "product image URL", "product price", "rating", "review count"]) # 写入表头
writer.writerows(product_data)
print(f"Data saved to {csv_file}")
# 关闭浏览器
driver.quit()编写高效的 CSS 选择器是至关重要的。以下是一些建议:
立即学习“前端免费学习笔记(深入)”;
本文介绍了使用 Selenium 和 CSS 选择器从 Patagonia 网站抓取产品数据的完整流程。通过编写简洁高效的 CSS 选择器,并结合动态加载处理和数据清洗,可以高效地获取所需数据。请务必遵守网站的使用条款和 robots.txt 协议,并注意网站结构变化和反爬虫机制。
以上就是使用 Selenium 和 CSS 选择器高效抓取 Patagonia 产品数据的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号