【问题标题】:How to segment document by tags with BeautifulSoup?如何使用 BeautifulSoup 按标签分割文档?
【发布时间】:2017-04-27 12:51:18
【问题描述】:

文档如下所示:

<div class="eh">...</div>
...
<section class="g">...</section> <!-- div 1 -->
...
<section class="g">...</section> <!-- div 1 -->
...
<div class="eh">...</div>
...
<section class="g">...</section> <!-- div 2 -->
...

所有这些标签都在同一个树级别。我需要将文档分成多个 div 的组,并将部分附加到相应的 div。

预期的结果是一个类似[div1, section1, section2, div2, section3] 的列表。它们按照它们在 HTML 中出现的顺序出现。

我当前的代码:

bs.find_all(
  ['div', 'section'], 
  {'class': ['eh', 'g']})

如果 div 和 section 具有不同的类,则此方法有效。

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python parsing beautifulsoup


【解决方案1】:

我认为这将使您朝着目标迈进。

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('temp.htm').read(), 'lxml')
tags = soup.find_all(['div','section'])

for tag in tags:
    print (tag.name, tag)

输出:

div <div class="eh">...</div>
section <section class="g">...</section>
section <section class="g">...</section>
div <div class="eh">...</div>
section <section class="g">...</section>
section <section class="g">...</section>
section <section class="g">...</section>
section <section class="g">...</section>

请注意,soup 中的项目是按照标签在soup.find_all 中列出的顺序输出的。

【讨论】:

  • 谢谢。它部分解决了我的问题。这个解决方案可以更具体,即找到多个标签,每个标签都有对应的类吗?
  • 请详细解释一下。
  • 我可以找到多个标签,每个标签都与它的类相关联吗?类似于:find_all (['div', {'class': 'eh'}, 'section', {'class': 'g'}])。我试过:find_all(['div', 'section'], {'class': ['eh', 'g'']})。有效,我可以进一步改进它吗?
  • 您应该就此提出一个新问题。这一次,您应该展示您编写的任何代码、您尝试处理的 HTML 示例以及您期望的结果。
猜你喜欢
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
相关资源
最近更新 更多