使用 Selenium 和 CSS 选择器高效抓取 Patagonia 产品数据

碧海醫心
发布: 2025-09-08 17:26:53
原创
757人浏览过

使用 selenium 和 css 选择器高效抓取 patagonia 产品数据

本文旨在指导开发者使用 Selenium Webdriver 和 CSS 选择器从 Patagonia 网站抓取女性夹克的产品信息,包括标题、URL、图片 URL、价格、评分和评论数量。文章将提供代码示例,并着重讲解如何编写简洁高效的 CSS 选择器,以及如何处理动态加载内容和数据清洗,最终将抓取的数据保存为 CSV 文件。

环境配置

首先,确保你已经安装了以下依赖:

  • Python 3.6+
  • Selenium: pip install selenium
  • Chrome WebDriver: 下载与你的 Chrome 浏览器版本匹配的 WebDriver,并将其添加到系统 PATH 环境变量中。

核心代码实现

以下代码展示了如何使用 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()
登录后复制

代码解析

  1. 导入必要的库: selenium, csv等。
  2. 配置 WebDriver: 指定 Chrome WebDriver 的路径。
  3. 打开目标网页: 使用 driver.get() 方法打开 Patagonia 网站。
  4. 编写 CSS 选择器: 使用简洁的 CSS 选择器定位到需要抓取的数据。例如,div.product-tile__title > a > span 用于定位产品标题。
  5. 处理动态加载: 使用 WebDriverWait 和 expected_conditions 来等待 "加载更多" 按钮出现,并模拟点击,直到所有产品都加载完毕。
  6. 数据提取: 使用 find_elements 找到所有产品元素,然后遍历每个产品,提取标题、URL、图片 URL、价格、评分和评论数量。注意使用 try...except 块来处理可能不存在的元素。
  7. 数据存储: 将提取的数据保存到 CSV 文件中。

CSS 选择器优化

编写高效的 CSS 选择器是至关重要的。以下是一些建议:

小绿鲸英文文献阅读器
小绿鲸英文文献阅读器

英文文献阅读器,专注提高SCI阅读效率

小绿鲸英文文献阅读器 199
查看详情 小绿鲸英文文献阅读器

立即学习前端免费学习笔记(深入)”;

  • 尽量使用 class 名称: class 名称通常比 id 名称更稳定。
  • 避免使用过于复杂的选择器: 选择器越复杂,执行效率越低。
  • 使用子选择器(>): 明确指定父子关系,提高选择器的准确性。
  • 利用属性选择器: 可以使用属性选择器来定位具有特定属性的元素,例如 img[src]。
  • 使用 nth-child() 选择器: 定位特定位置的子元素,例如上面例子中的 #product-search-results > div.row.product-grid.load-more-present > div[class^="col"]:nth-child(24)。

注意事项

  • 网站结构变化: 网站结构可能会发生变化,导致 CSS 选择器失效。需要定期检查和更新选择器。
  • 爬虫机制: 网站可能会采取反爬虫措施,例如限制访问频率或使用验证码。需要采取相应的反反爬虫策略。
  • 遵守 robots.txt: 遵守网站的 robots.txt 协议,避免抓取不允许抓取的内容。
  • 异常处理: 完善异常处理机制,确保程序在出现错误时能够正常运行。
  • 数据清洗: 抓取到的数据可能需要进行清洗和转换,例如去除空格、转换数据类型等。

总结

本文介绍了使用 Selenium 和 CSS 选择器从 Patagonia 网站抓取产品数据的完整流程。通过编写简洁高效的 CSS 选择器,并结合动态加载处理和数据清洗,可以高效地获取所需数据。请务必遵守网站的使用条款和 robots.txt 协议,并注意网站结构变化和反爬虫机制。

以上就是使用 Selenium 和 CSS 选择器高效抓取 Patagonia 产品数据的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号