如何用Beautiful Soup提取每个li标签data-gs-ta-val中的slug值
使用Beautiful Soup提取HTML中li标签的slug值
需求说明
从以下HTML片段里,提取每个class为gs_ta_choice的<li>标签中,data-gs-ta-val属性里的slug字段值:
<li class="gs_ta_choice" data-value="Bangalore" data-gs-ta-val="{'text':'Bangalore','value':'Bangalore','CID':'105','id':'105','P':'1','slug':'bangaluru'}" style="line-height: initial;"> Bangalore</li> <li class="gs_ta_choice" data-value="Bangalore" data-gs-ta-val="{'text':'Chennai','value':'Chennai','CID':'106','id':'106','P':'2','slug':'madras'}" style="line-height: initial;"> Chennai</li> <li class="gs_ta_choice" data-value="Bangalore" data-gs-ta-val="{'text':'Mumbai','value':'Mumbai','CID':'108','id':'108','P':'3','slug':'bombay'}" style="line-height: initial;"> Mumbai</li>
实现步骤与代码
- 导入
BeautifulSoup和ast模块(用ast.literal_eval安全解析单引号格式的字典字符串,比直接替换引号更可靠)。 - 解析HTML内容,定位所有目标
<li>标签。 - 遍历标签,提取属性内容并解析为字典,最终取出
slug值。
完整代码示例:
from bs4 import BeautifulSoup import ast # 给定的HTML内容 html_content = ''' <li class="gs_ta_choice" data-value="Bangalore" data-gs-ta-val="{'text':'Bangalore','value':'Bangalore','CID':'105','id':'105','P':'1','slug':'bangaluru'}" style="line-height: initial;"> Bangalore</li> <li class="gs_ta_choice" data-value="Bangalore" data-gs-ta-val="{'text':'Chennai','value':'Chennai','CID':'106','id':'106','P':'2','slug':'madras'}" style="line-height: initial;"> Chennai</li> <li class="gs_ta_choice" data-value="Bangalore" data-gs-ta-val="{'text':'Mumbai','value':'Mumbai','CID':'108','id':'108','P':'3','slug':'bombay'}" style="line-height: initial;"> Mumbai</li> ''' # 解析HTML soup = BeautifulSoup(html_content, 'html.parser') # 找到所有class为gs_ta_choice的li标签 li_tags = soup.find_all('li', class_='gs_ta_choice') # 提取每个标签的slug值 slug_list = [] for tag in li_tags: # 获取data-gs-ta-val属性值 data_val = tag.get('data-gs-ta-val') # 解析为字典 data_dict = ast.literal_eval(data_val) # 提取slug并添加到列表 slug_list.append(data_dict['slug']) # 输出结果 print(slug_list)
运行结果
执行代码后,会输出:
['bangaluru', 'madras', 'bombay']
内容的提问来源于stack exchange,提问作者kishor khade
相关产品推荐
相关产品推荐

