使用BeautifulSoup来获取两个标签之间的所有HTML

pas*_*sky 19 html python beautifulsoup

我有一些看起来像这样的HTML:

<h1>Title</h1>

//a random amount of p/uls or tagless text

<h1> Next Title</h1>
Run Code Online (Sandbox Code Playgroud)

我想将所有HTML从第一个h1复制到下一个h1.我怎样才能做到这一点?

小智 12

这是明确的BeautifulSoup方式,当第二个h1标签是第一个标签的兄弟:

html = u""
for tag in soup.find("h1").next_siblings:
    if tag.name == "h1":
        break
    else:
        html += unicode(tag)
Run Code Online (Sandbox Code Playgroud)

  • 修改它的 BeautifulSoup 方法是什么,也可以从第二组 `&lt;h1&gt;` 标签中捕获内容,直到文档结束? (2认同)

mal*_*man 5

我也有同样的问题。不确定是否有更好的解决方案,但我所做的是使用正则表达式来获取我正在寻找的两个节点的索引。完成后,我提取两个索引之间的 HTML 并创建一个新的 BeautifulSoup 对象。

例子:

m = re.search(r'<h1>Title</h1>.*?<h1>', html, re.DOTALL)
s = m.start()
e = m.end() - len('<h1>')
target_html = html[s:e]
new_bs = BeautifulSoup(target_html)
Run Code Online (Sandbox Code Playgroud)


lin*_*eak 0

有趣的问题。您无法仅使用 DOM 来选择它。您必须循环遍历第一个 h1(包括)之前的所有元素,并将它们放入 intro = str(intro) 中,然后将第二个 h1 之前的所有元素放入 Chapter1 中。然后使用以下命令从第一章中删除介绍

chapter = chapter1.replace(intro, '')
Run Code Online (Sandbox Code Playgroud)