如何用Python从响应JSON中获取指定元素的属性值
如何从Python请求返回的JSON响应中提取指定元素的data属性值
需求说明
需要从API返回的JSON响应内的HTML片段中,提取带有data-has_lei="true"属性的元素的以下data属性值:
data-namedata-country_namedata-reg_codedata-addressdata-lei_codedata-lei_registration_authority
修改后的代码实现
import requests from bs4 import BeautifulSoup api_url = "https://lei-registrations.in/wp/wp-admin/admin-ajax.php" params = { "term": "ditech process solutions", # <-- 搜索关键词 "country": "IN", "action": "get_search_companies", } headers = { "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" } data = requests.get(api_url, params=params, headers=headers).json() if data["success"]: soup = BeautifulSoup(data["data"], "html.parser") # 直接筛选带有data-has_lei="true"属性的目标元素 for element in soup.select('[data-has_lei="true"]'): # 通过get方法安全获取data属性,属性不存在时返回None name = element.get("data-name") country_name = element.get("data-country_name") reg_code = element.get("data-reg_code") address = element.get("data-address") lei_code = element.get("data-lei_code") lei_reg_authority = element.get("data-lei_registration_authority") # 格式化输出提取到的信息 print("企业LEI信息:") print(f"名称: {name or '无'}") print(f"国家: {country_name or '无'}") print(f"注册码: {reg_code or '无'}") print(f"地址: {address or '无'}") print(f"LEI编码: {lei_code or '无'}") print(f"LEI注册机构: {lei_reg_authority or '无'}") print("-" * 80)
关键说明
- 精准定位元素:使用CSS选择器
[data-has_lei="true"]直接筛选符合条件的元素,无需遍历所有.searchResults_title再判断,提升效率。- 若目标元素是
.searchResults_title的子元素,可修改选择器为.searchResults_title [data-has_lei="true"];若目标元素本身就是.searchResults_title,则用.searchResults_title[data-has_lei="true"]。
- 若目标元素是
- 安全获取属性:使用
element.get(属性名)方法获取data属性,当属性不存在时会返回None,避免抛出KeyError异常。 - 容错输出:用
or '无'处理属性缺失的情况,保证输出格式统一。
内容的提问来源于stack exchange,提问作者Yug
相关产品推荐
相关产品推荐

