【发布时间】:2021-02-07 12:09:52
【问题描述】:
我目前正在尝试为一个小项目抓取网页。但是,当尝试选择两个标题之间的所有内容时,我遇到了问题。这是我尝试选择的标题之一的示例:
<h2><a class="autolink" href="/compendium/dnd5e/Social%20Interaction#h-Long%20Rest">Long Rest</a></h2>
发现于:https://roll20.net/compendium/dnd5e/Rules:Resting/#h-Resting
这是我目前的代码:
els = soup.select("h2:has(a:contains('Short Rest')) ~ *:has(~ h2:has(a:contains('Long Rest')))")
但是,使用它会返回所有使用的标签及其标签的列表,而不是我想的文本。所需的输出将是 h2 'Short Rest' 和 h2 'Long Rest' 之间的所有 HTML,因此本质上是描述短暂休息的文本。
我没有使用更简单的tag.next_sibling 方法的原因是该网页上有很多未标记的文本,该方法会跳过这些文本。
任何帮助将不胜感激,我已经坚持了一段时间了。
【问题讨论】:
-
Did you want an extra ) as in contains('Short Rest')) 如果您提供链接并指出我们可以测试的所需结果
-
@QHarr 啊,为那里的错字道歉,它解决了错误问题但仍然没有返回所需的结果 - 我将更新问题以证明这一点。
-
我认为您实际上可能需要 next_sibling,因为该文本位于更高的父 div 下,并且您当前的通用兄弟组合器会错过该文本。
-
@QHarr 虽然如问题中所述,但这会跳过未标记的文本,因为它们不是通过使用 next_sibling 找到的。
标签: python css beautifulsoup