gpt4 book ai didi

python - 在 h 标签之后查找 'p' 标签

转载 作者:行者123 更新时间:2023-12-03 16:44:32 27 4
gpt4 key购买 nike

我想找到从网页中提取标题和段落文本。问题是在具有相同标题标签和段落标签的标题之后有灵活数量的标题和段落。

示例 HTML -

<h6>PHYSICAL DESCRIPTION</h6>

<p>
<strong class="offender">YOB:</strong> 1987<br />
<strong class="offender">RACE:</strong> WHITE<br />
<strong class="offender">GENDER:</strong> FEMALE<br />
<strong class="offender">HEIGHT:</strong> 5'05''<br />
<strong class="offender">WEIGHT:</strong> 118<br />
<strong class="offender">EYE COLOR:</strong> GREEN<br />
<strong class="offender">HAIR COLOR:</strong> BROWN<br />
</p>


<h6>SCARS, MARKS, TATTOOS</h6>
<p>
&nbsp;
</p>

我使用的代码如下 -

sub = soup.findAll('h6')
print sub.text

sub = soup.findAll('p')
for strong_tag in sub.find_all('strong'):
print strong_tag.text, strong_tag.next_sibling

由于 header 中不包含 p 标签,我不确定如何处理 HTML 以使其写入。

有没有一种方法可以将 HTML 视为文件并找到下一个 h6 标签,然后找到下一个 p 标签并一直这样做到最后?

最佳答案

您可以使用 Tag.find_next_sibling() 这里:

for header in soup.find_all('h6'):
para = header.find_next_sibling('p')
.find_next_sibling()调用返回第一个 p标签是 header 标签的下一个兄弟标签。

演示:
>>> for header in soup.find_all('h6'):
... print header.text
... para = header.find_next_sibling('p')
... for strong_tag in para.find_all('strong'):
... print strong_tag.text, strong_tag.next_sibling
... print
...
PHYSICAL DESCRIPTION
YOB: 1987
RACE: WHITE
GENDER: FEMALE
HEIGHT: 5'05''
WEIGHT: 118
EYE COLOR: GREEN
HAIR COLOR: BROWN

SCARS, MARKS, TATTOOS

这可能会发现错误 <p>标记以防当前标题和下一个标题之间没有段落:
<h6>Foo</h6>
<div>A div, not a p</div>

<h6>Bar</h6>
<p>This <i>is</i> a paragraph</p>

在这种情况下,搜索 <p><h6>标签:
for header in soup.find_all('h6'):
next_sibling = header.find_next_sibling(['p', 'h6'])
if next_sibling.name == 'h6':
# no <p> tag between this header and the next, skip
continue
header.find_next_sibling(['p', 'h6']) call 要么找到下一段,要么找到下一个标题,以先到者为准。

关于python - 在 h 标签之后查找 'p' 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23384836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com