如何在WeatherUnderground爬虫中切换至公制单位获取数据?
解决WeatherUnderground爬虫切换公制单位的方案
核心思路:爬取数据前用Selenium模拟人工操作完成单位切换,后续直接抓取公制数据,省掉字符串转单位的麻烦。
具体操作步骤
- 启动浏览器打开目标页面
- 找到页面上的设置入口(比如右上角的齿轮图标),点击进入设置界面
- 定位到公制单位选项(一般标注为"Metric"或"公制"),点击选择
- 确认保存设置(部分页面需要点击保存按钮)
- 等页面刷新后,再执行你原本的爬取逻辑
示例代码(Python)
假设页面的设置按钮CSS选择器是button.settings-icon,公制选项是label.metric-option,参考代码如下:
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 # 初始化Chrome浏览器 driver = webdriver.Chrome() driver.get("https://www.wunderground.com/your-target-location") # 等待设置按钮加载完成并点击 settings_button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "button.settings-icon")) ) settings_button.click() # 等待公制选项出现并选择 metric_option = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "label.metric-option")) ) metric_option.click() # 点击保存设置(如果页面有这个按钮) save_button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "button.save-btn")) ) save_button.click() # 等待页面刷新,确认单位切换完成(可以通过等待某个公制单位元素出现,或者URL变化) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".temp-c")) ) # 执行你原本的爬取逻辑,比如抓取温度 current_temp = driver.find_element(By.CSS_SELECTOR, ".current-temp-value").text # 写入TXT文件 with open("weather_data.txt", "a", encoding="utf-8") as f: f.write(f"当前温度: {current_temp}\n") # 关闭浏览器 driver.quit()
关键注意点
- 不同页面的元素选择器可能不一样,你需要用浏览器开发者工具(F12)确认实际的CSS选择器
- 必须用显式等待(
WebDriverWait),避免页面未加载完全导致元素找不到 - 如果网站会保存设置到Cookie,后续爬取可以加载保存的Cookie,不用每次都切换单位
内容的提问来源于stack exchange,提问作者user22018490
相关产品推荐
相关产品推荐

