Python中BeautifulSoup的find()传入元组未报错的原因咨询
为什么BeautifulSoup传入元组作为id参数能正常匹配?
你遇到的这个现象,本质是BeautifulSoup对find方法关键字参数的特殊处理逻辑:
当你给id=这类属性匹配参数传入非字符串的可迭代对象(比如元组、列表)时,BeautifulSoup不会报错,而是将其当作「属性值等于该可迭代对象中任意一个元素」的匹配条件。
在你的代码里:
tup = ('01', 'Revenue') acc = soup.find(id=tup).text.strip().split('\n')
元组里的第一个元素'01'正好是目标元素的id,而页面中没有id为'Revenue'的元素,所以find最终匹配到了id='01'的元素,结果和直接传id='01'完全一致。
你预想的KeyError不会出现,是因为BeautifulSoup的参数校验逻辑允许传入可迭代对象,它会自动解析并执行多值匹配,而非强制要求必须传字符串。
如果你的页面里同时存在id='01'和id='Revenue'的元素,soup.find(id=tup)会返回页面中第一个出现的匹配元素,这时候结果就和单独传id='01'有区别了。
内容的提问来源于stack exchange,提问作者Quan Tran
相关产品推荐
相关产品推荐

