如何在指定网页输入信息后抓取对应电价结果?
解决Tibber动态电价抓取问题
因为目标页面的电价是通过JavaScript动态生成的,requests只能获取静态HTML,所以需要用两种方式实现:模拟浏览器交互或直接调用后台API。
方法一:用Selenium模拟用户操作
这种方式完全模拟人工输入流程,适合不想折腾API的场景:
先安装依赖并准备驱动:
pip install selenium下载对应浏览器的驱动(比如Chrome的ChromeDriver,版本要和浏览器匹配),可以放到系统PATH里,或者在代码中指定路径。
代码示例:
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浏览器(可替换为Firefox等) driver = webdriver.Chrome() driver.get("https://tibber.com/de/stromtarif#price-calculator") try: # 等待邮编输入框加载完成,输入目标邮编 postal_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "postalCode")) ) postal_input.send_keys("10178") # 等待用电量输入框加载,输入年用电量 consumption_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "consumption")) ) consumption_input.send_keys("3500") # 等待电价元素加载并提取内容 price_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "h1.jsx-3205991333.price.f-heading.fs-xxxl")) ) print(f"计算后电价:{price_element.text}") finally: # 关闭浏览器 driver.quit()
方法二:直接调用后台API(更高效)
打开浏览器开发者工具(F12),切换到「Network」标签,输入邮编和用电量后,观察XHR请求,能找到网站获取电价的后台API接口。直接调用这个接口比模拟浏览器更快:
抓包获取API信息:
输入测试数据后,找到触发的POST/GET请求,复制请求URL、请求头和参数(比如邮编、用电量、地区标识等)。代码示例(需替换为实际抓包到的API信息):
import requests # 替换为抓包得到的API地址 api_url = "https://api.tibber.com/v1/price-calculation" # 替换为抓包得到的请求参数 payload = { "postalCode": "10178", "consumption": 3500, "country": "DE" } # 替换为抓包得到的必要请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Referer": "https://tibber.com/de/stromtarif" } response = requests.post(api_url, json=payload, headers=headers) data = response.json() # 根据API返回的JSON结构提取电价(示例结构,需实际调整) price = data["result"]["monthlyPrice"] print(f"计算后电价:{price} €")
注意事项
- API接口可能会随网站更新变化,需要定期验证
- 不要频繁发送请求,避免触发网站的反爬机制
- 抓包时要确保请求头和参数完整,否则可能返回错误
内容的提问来源于stack exchange,提问作者RiskyWhisky
相关产品推荐
相关产品推荐

