如何用Python提取HTML中li的class属性与文本并转换状态标识?
提取设备拥有状态:结合BeautifulSoup处理class与文本
我来帮你搞定这个设备状态提取的需求!结合requests和BeautifulSoup,我们可以轻松实现你想要的功能,下面分两种输出格式给你具体的代码方案:
方案1:输出原始class标识与设备名称
这个方案会直接输出specChecked, 设备名或, 设备名的格式,完全匹配你给出的示例要求:
import requests from bs4 import BeautifulSoup # 替换为你要爬取的目标页面URL target_url = "https://your-target-page.com" # 发起请求获取页面内容 response = requests.get(target_url) # 用BeautifulSoup解析HTML soup = BeautifulSoup(response.text, "html.parser") # 获取所有目标li标签(如果li在特定父元素下,比如class为device-list的ul,可以更精准:soup.find('ul', class_='device-list').find_all('li')) all_li = soup.find_all("li") for li in all_li: # 获取li的class属性,默认返回空列表避免报错 li_classes = li.get("class", []) # 判断是否包含specChecked类 status_class = "specChecked" if "specChecked" in li_classes else "" # 提取设备名称,去除前后空白字符 device_name = li.get_text(strip=True) # 按要求格式输出 print(f"{status_class}, {device_name}")
方案2:转换为1/0状态标识
如果需要把specChecked替换为1,空class替换为0,只需要稍微修改状态判断逻辑即可:
import requests from bs4 import BeautifulSoup target_url = "https://your-target-page.com" response = requests.get(target_url) soup = BeautifulSoup(response.text, "html.parser") all_li = soup.find_all("li") for li in all_li: li_classes = li.get("class", []) # 转换为数字状态:1表示拥有,0表示未拥有 status = 1 if "specChecked" in li_classes else 0 device_name = li.get_text(strip=True) print(f"{status}, {device_name}")
关键细节说明
- 为什么用
li.get("class", [])?因为HTML元素的class是多值属性,BeautifulSoup会把它解析为列表;如果元素没有class,这个方法会返回我们指定的空列表,避免抛出属性不存在的错误。 - 用
"specChecked" in li_classes判断更严谨:即使li标签同时有多个class(比如class="specChecked highlight"),也能正确识别出设备已拥有的状态。 li.get_text(strip=True)可以自动去除文本前后的空格、换行符,得到干净的设备名称。
内容的提问来源于stack exchange,提问作者Lara19
相关产品推荐
相关产品推荐

