
本文旨在指导开发者使用 Selenium Webdriver 和 CSS 选择器从 Patagonia 网站抓取女性夹克的产品信息,包括标题、URL、图片 URL、价格、评分和评论数量。文章将提供代码示例,并着重讲解如何编写简洁高效的 CSS 选择器,以及如何处理动态加载内容和数据清洗,最终将抓取的数据保存为 CSV 文件。
环境配置首先,确保你已经安装了以下依赖:
- Python 3.6+
- Selenium: pip install selenium
- Chrome WebDriver: 下载与你的 Chrome 浏览器版本匹配的 WebDriver,并将其添加到系统 PATH 环境变量中。
以下代码展示了如何使用 Selenium 和 CSS 选择器抓取 Patagonia 网站上的女性夹克信息,并将其保存为 CSV 文件。
PIA
全面的AI聚合平台,一站式访问所有顶级AI模型
226
查看详情
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() 代码解析
- 导入必要的库: selenium, csv等。
- 配置 WebDriver: 指定 Chrome WebDriver 的路径。
- 打开目标网页: 使用 driver.get() 方法打开 Patagonia 网站。
- 编写 CSS 选择器: 使用简洁的 CSS 选择器定位到需要抓取的数据。例如,div.product-tile__title > a > span 用于定位产品标题。
- 处理动态加载: 使用 WebDriverWait 和 expected_conditions 来等待 "加载更多" 按钮出现,并模拟点击,直到所有产品都加载完毕。
- 数据提取: 使用 find_elements 找到所有产品元素,然后遍历每个产品,提取标题、URL、图片 URL、价格、评分和评论数量。注意使用 try...except 块来处理可能不存在的元素。
- 数据存储: 将提取的数据保存到 CSV 文件中。
编写高效的 CSS 选择器是至关重要的。以下是一些建议:
- 尽量使用 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 产品数据的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: css python go 浏览器 app ai 环境变量 爬虫 webdriver 属性选择器 Python css chrome pip 数据类型 try class 选择器 大家都在看: 使用BeautifulSoup高效查找HTML元素:解决注释与CSS类选择难题 Selenium中Iframe内元素的XPath与CSS选择器定位策略 高效抓取Iframe内元素:Selenium与XPath/CSS选择器实践指南 解决Django静态文件404错误:CSS加载失败的配置与引用指南 解决Django中CSS等静态文件加载失败的常见问题






发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。