Python/BeautifulSoup从两个标题之间提取列表<UL><LI>

2024-06-11 01:46:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网站,他们的布局基本上是这样的:

<h2>
    First Heading
</h2>
<h2>
    <span class="class" id="id1">Second Heading</span>
</h2>
<ul>
    <li>One</li><li>Two</li><li>Three</li><li>Four</li><li>Five</li>
</ul>
<h2>
    <span class="class" id="id2">Third Heading</span>
</h2>
<ul>
    <li>Red</li><li>Orange</li><li>Yellow</li><li>Green</li><li>Blue</li>
</ul>
<h2>
    <span class="class" id="id3">Last Heading</span>
</h2>
<ul>
    <li>VVV</li><li>WWW</li><li>XXX</li><li>YYY</li><li>ZZZ</li>
</ul>

如何从第二个标题和第三个标题之间获取列表项

我从这开始考虑这样的事情:

h2s = soup.find_all("h2")

for h2 in h2s:
    print(h2.span)

然后,我又谈到了更像这样的事情:

startSpan = soup.find("span", id="id1")
stopSpan = soup.find("span", id="id2")

我曾想过要重复一遍,但我很难把这一切放在一起

最终,我要做的是:

["One", "Two", "Three"...]

不包括页面下方的其他列表


Tags: id标题lih2finduloneclass
1条回答
网友
1楼 · 发布于 2024-06-11 01:46:06
  1. 使用^{}CSS选择器搜索第二个<h2>标记
  2. 使用^{}方法搜索下一个<ul>标记

soup = BeautifulSoup(html, "html.parser")

print(
    soup.select_one("h2:nth-of-type(2)")
    .find_next("ul")
    .get_text(strip=True, separator="|")
    .split("|")
)

输出:

['One', 'Two', 'Three', 'Four', 'Five']

编辑以选择“事件”下的所有<li>标记:

for tag in soup.select(".mw-parser-output > ul:nth-of-type(1) li"):
    print(tag.text)

相关问题 更多 >