Python - BeautifulSoup 按属性查找父级
Python - BeautifulSoup findParent by attribute
我希望使用 BeautifulSoup 中的 findParent() 方法来查找具有 id 属性的特定标签的父级。例如,考虑以下示例 XML:
<monograph>
<section id="1234">
<head>Test Heading</head>
<p>Here's a paragraph with some text in it.</p>
</section>
</monograph>
假设我已经匹配了段落中的某些内容,我想使用 findParent 不加区别地找到具有 id 属性的树中的第一个父项。类似于:
for hit in monograph(text="paragraph with"):
containername = hit.findParent(re.compile([A-Za-z]+), {id}).name
但是,前面的代码 return 没有任何命中。
使用 id=True
匹配具有 id
属性的元素,而不考虑属性的值:
hit.find_parent(id=True)
相反,使用 id=False
会找到第一个父元素 没有 id
属性。
请注意,对于 BeautifulSoup 方法,您应该真正使用 lower_case_with_underscores 样式; findParent
是 BeautifulSoup 3 的拼写 has been deprecated.
演示:
>>> from bs4 import BeautifulSoup
>>> sample = '''\
... <monograph>
... <section id="1234">
... <head>Test Heading</head>
... <p>Here's a paragraph with some text in it.</p>
... </section>
... </monograph>
... '''
>>> soup = BeautifulSoup(sample, 'xml')
>>> str(soup.p)
"<p>Here's a paragraph with some text in it.</p>"
>>> print(soup.p.find_parent(id=True).prettify())
<section id="1234">
<head>
Test Heading
</head>
<p>
Here's a paragraph with some text in it.
</p>
</section>
>>> print(soup.p.find_parent(id=False).prettify())
<monograph>
<section id="1234">
<head>
Test Heading
</head>
<p>
Here's a paragraph with some text in it.
</p>
</section>
</monograph>
我希望使用 BeautifulSoup 中的 findParent() 方法来查找具有 id 属性的特定标签的父级。例如,考虑以下示例 XML:
<monograph>
<section id="1234">
<head>Test Heading</head>
<p>Here's a paragraph with some text in it.</p>
</section>
</monograph>
假设我已经匹配了段落中的某些内容,我想使用 findParent 不加区别地找到具有 id 属性的树中的第一个父项。类似于:
for hit in monograph(text="paragraph with"):
containername = hit.findParent(re.compile([A-Za-z]+), {id}).name
但是,前面的代码 return 没有任何命中。
使用 id=True
匹配具有 id
属性的元素,而不考虑属性的值:
hit.find_parent(id=True)
相反,使用 id=False
会找到第一个父元素 没有 id
属性。
请注意,对于 BeautifulSoup 方法,您应该真正使用 lower_case_with_underscores 样式; findParent
是 BeautifulSoup 3 的拼写 has been deprecated.
演示:
>>> from bs4 import BeautifulSoup
>>> sample = '''\
... <monograph>
... <section id="1234">
... <head>Test Heading</head>
... <p>Here's a paragraph with some text in it.</p>
... </section>
... </monograph>
... '''
>>> soup = BeautifulSoup(sample, 'xml')
>>> str(soup.p)
"<p>Here's a paragraph with some text in it.</p>"
>>> print(soup.p.find_parent(id=True).prettify())
<section id="1234">
<head>
Test Heading
</head>
<p>
Here's a paragraph with some text in it.
</p>
</section>
>>> print(soup.p.find_parent(id=False).prettify())
<monograph>
<section id="1234">
<head>
Test Heading
</head>
<p>
Here's a paragraph with some text in it.
</p>
</section>
</monograph>