如何用Python Selenium提取SVG viewBox内的营业时间数据
使用Python Selenium提取TripAdvisor餐厅营业时间
下面是针对你需求的具体实现步骤和代码:
1. 环境准备
- 安装Selenium:在终端运行
pip install selenium - 下载对应浏览器的驱动(比如ChromeDriver),确保驱动版本和你的浏览器版本匹配,可将驱动路径配置到系统环境变量,或在代码中直接指定路径。
2. 核心代码实现
以Chrome浏览器为例,代码包含Cookie弹窗处理、元素等待、点击svg展开营业时间、提取数据的完整逻辑:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化浏览器(若驱动未在环境变量,需指定executable_path参数) driver = webdriver.Chrome() # 访问目标页面 driver.get("https://www.tripadvisor.in/Restaurant_Review-g32655-d7222445-Reviews-The_Anchor-Los_Angeles_California.html") try: # 处理Cookie弹窗,点击同意按钮(适配中英文文案) cookie_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), '同意') or contains(text(), 'Accept')]")) ) cookie_btn.click() # 等待svg元素加载完成并点击(通过viewBox属性定位) hours_svg = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//svg[@viewBox='0 0 24 24']")) ) hours_svg.click() # 等待营业时间区域加载,提取文本 hours_text = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.XPATH, "//div[contains(@class, 'hours') or contains(text(), '营业时间')]")) ).text # 输出结果 print("营业时间:") print(hours_text) finally: # 关闭浏览器 driver.quit()
3. 关键注意事项
- 元素定位:如果上述svg的XPath定位失效,可右键检查页面,复制该svg元素的完整XPath或CSS选择器替换使用
- 显式等待:务必使用
WebDriverWait而非固定sleep,避免因页面加载缓慢导致元素找不到的问题 - 驱动适配:保证浏览器驱动版本与浏览器版本完全匹配,否则会出现启动失败的情况
内容的提问来源于stack exchange,提问作者hari ram
相关产品推荐
相关产品推荐

