
本文旨在指导开发者使用 Selenium Webdriver 和 CSS 选择器从 Patagonia 网站抓取女性夹克的产品信息,包括标题、URL、图片 URL、价格、评分和评论数量。文章将提供代码示例,并着重讲解如何编写简洁高效的 CSS 选择器,以及如何处理动态加载内容和数据清洗,最终将抓取的数据保存为 CSV 文件。
环境配置
首先,确保你已经安装了以下依赖:
Python 3.6+Selenium: pip install seleniumChrome WebDriver: 下载与你的 Chrome 浏览器版本匹配的 WebDriver,并将其添加到系统 PATH 环境变量中。
核心代码实现
以下代码展示了如何使用 Selenium 和 CSS 选择器抓取 Patagonia 网站上的女性夹克信息,并将其保存为 CSV 文件。
from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.common.exceptions import TimeoutException, NoSuchElementExceptionimport csv# 配置 Chrome WebDriverservice = Service(executable_path='/path/to/chromedriver') # 替换为你的 chromedriver 路径driver = webdriver.Chrome(service=service)# 目标 URLurl = "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}") continuedef 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 选择器优化
编写高效的 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 产品数据的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1370592.html
微信扫一扫
支付宝扫一扫