Python & BeautifulSoup新手求助:如何从给定HTML代码提取标签?
新手友好的流量数据提取方案
嘿,别慌!作为刚接触Python、BS和Selenium的新手,能爬到目标页面已经超棒了~ 你拿到的这个带data-*属性的div,就是藏着流量数据的关键!接下来咱们一步步把这些数值提取出来:
一、用BeautifulSoup提取数据
假设你已经把爬取到的页面内容转换成了BeautifulSoup对象,直接定位元素+提取属性就行:
示例代码
from bs4 import BeautifulSoup # 假设你爬取的页面内容存在html变量中 soup = BeautifulSoup(html, 'html.parser') # 精准定位到带data属性的目标div target_div = soup.find('div', class_='usage_circle').find('center').find('div') # 提取各个流量相关数据,记得转换为合适的数值类型 used_percent = int(target_div['data-perc']) # 已用百分比(69) usage_ratio = float(target_div['data-transitiongoal']) # 流量使用比例(0.69) used_traffic = float(target_div['data-usage']) # 已用流量(150.29) # 打印看看结果 print(f"当前已用流量百分比:{used_percent}%") print(f"流量使用占比:{usage_ratio}") print(f"已用流量:{used_traffic} GB") # 单位根据实际情况调整,比如MB
二、用Selenium直接提取(不用BeautifulSoup)
如果你的页面是动态加载的,用Selenium直接定位元素提取属性更省心:
示例代码
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("你的ISP流量监控页面URL") # 等待元素加载完成(避免页面没加载完就提取导致报错) try: target_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'div.usage_circle center div')) ) # 提取属性值并转换类型 used_percent = int(target_element.get_attribute('data-perc')) usage_ratio = float(target_element.get_attribute('data-transitiongoal')) used_traffic = float(target_element.get_attribute('data-usage')) print(f"当前已用流量百分比:{used_percent}%") print(f"流量使用占比:{usage_ratio}") print(f"已用流量:{used_traffic} GB") finally: driver.quit() # 记得关闭浏览器
几个新手注意点
- 元素定位要准确:如果页面有多个
usage_circle类的元素,得调整定位方式(比如用XPath或者更具体的CSS选择器) - 异常处理:如果遇到属性值为空或者非数字的情况,记得用
try-except包裹,避免程序崩溃 - 动态页面要等加载:用Selenium时,一定要等待元素加载完成再操作,不然会找不到元素哦
内容的提问来源于stack exchange,提问作者TStef
相关产品推荐
相关产品推荐

