我使用lxml执行xpath以获得etree._Element类型的节点。 我也有一些bs4.Tag类型的节点。
然后,我想知道这两个节点是否引用相同的HTML元素。最好的方法是什么?
我目前所做的是一种非常简单的方法,可以检查以下各项(例如)的相等性:
或者只是从根到该节点的规范路径。
但是,这不方便。
答案 0 :(得分:1)
此代码可以帮助您比较最多html
个元素的路径,同时考虑标记和属性,但是比较元素的文本非常棘手
def compare_elements(bs_tag, lxml_element):
# running till the very top
while bs_tag.name != 'html' and lxml_element.tag != 'html':
# compare tag
if bs_tag.name != lxml_element.tag:
return False
# compare attributes
# bs groups into lists, so we need to join back to string
bs_attrs = {k: ' '.join(v) if isinstance(v, list) else v for k, v in bs_tag.attrs.items()}
if bs_attrs != lxml_element.attrib:
return False
# going up
bs_tag = bs_tag.parent
lxml_element = lxml_element.getparent()
return True