如何使用BeautifulSoup获取包含cRef属性的所有元素?
问题与解决方案
我有一个XML文件,已通过以下代码用BeautifulSoup解析:
import bs4 as bs with open('interim.xml', 'r') as f: file = f.read() soup = bs.BeautifulSoup(file, 'lxml')
我的需求是获取所有包含cRef属性的元素及其内容,无论元素的type属性是否为"biblical"。最初尝试用Refs = soup.find_all(attrs={'type':'biblical'})筛选元素,但发现存在type为"biblical"但无cRef的元素,而所有带cRef的元素才是我的目标。
方法确认
你使用Refs = soup.find_all(attrs={'cref':True})的方法是完全正确的。在BeautifulSoup中,当指定属性值为True时,会匹配所有存在该属性的元素,不管属性的具体取值是什么,正好满足你筛选所有带cRef属性元素的需求。
属性值提取
后续通过Refs[i].get('cref')获取属性值的写法也是正确的。另外也可以直接使用Refs[i]['cref']来提取,但get()方法更安全——当元素意外没有该属性时,get()会返回None,而直接索引会抛出异常。
预期输出示例
[<ref cref="Gn_1,26-27" type="biblical">Gen 1,26f.</ref>, <ref cref="Sir_15,14" type="biblical">Sir 15,14</ref>, <ref cref="Rm_5,12" type="biblical">Röm 5,12</ref> ]
内容的提问来源于stack exchange,提问作者KWunsch
相关产品推荐
相关产品推荐

