本文旨在指导开发者使用 Selenium Webdriver 和 CSS 选择器从 Patagonia 网站抓取女性夹克的产品信息,包括标题、URL、图片 URL、价格、评分和评论数量。文章将提供代码示例,并着重讲解如何编写简洁高效的 CSS 选择器,以及如何处理动态加载内容和数据清洗,最终将抓取的数据保存为 CSV 文件。
环境配置首先,确保你已经安装了以下依赖:
- Python 3.6+
- Selenium: pip install selenium
- Chrome WebDriver: 下载与你的 Chrome 浏览器版本匹配的 WebDriver,并将其添加到系统 PATH 环境变量中。
以下代码展示了如何使用 Selenium 和 CSS 选择器抓取 Patagonia 网站上的女性夹克信息,并将其保存为 CSV 文件。

全面的AI聚合平台,一站式访问所有顶级AI模型


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等静态文件加载失败的常见问题
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。