当前位置: 首页 > 面试题库 >

如何使用BeautifulSoup在两个指定标签之间获取所有文本?

罗昱
2023-03-14
问题内容
html = """
...
<tt class="descname">all</tt>
<big>(</big>
<em>iterable</em>
<big>)</big>
<a class="headerlink" href="#all" title="Permalink to this definition">¶</a>
...
"""

我想获取从开始标记big到第一次出现a标记之前的所有文本。这意味着,如果我举这个例子,那么我必须(iterable)以字符串形式获取。


问题答案:

我会避免使用nextSibling,因为从您的问题开始,您想要包括直到next的所有内容<a>,而不管它是在同级元素,父元素还是子元素中。

因此,我认为最好的方法是找到下一个<a>元素的节点,然后递归循环,直到出现为止,然后添加遇到的每个字符串。如果您的HTML与示例大不相同,则可能需要整理以下内容,但是这样的工作应该可以:

from bs4 import BeautifulSoup
#by taking the `html` variable from the question.
html = BeautifulSoup(html)
firstBigTag = html.find_all('big')[0]
nextATag = firstBigTag.find_next('a')
def loopUntilA(text, firstElement):
    text += firstElement.string
    if (firstElement.next.next == nextATag):             
        return text
    else:
        #Using double next to skip the string nodes themselves
        return loopUntilA(text, firstElement.next.next)
targetString = loopUntilA('', firstBigTag)
print targetString


 类似资料:
  • 问题内容: 我正在尝试获取2 h1标签之间的所有html。实际的任务是根据h1(heading 1)标签将html分成几帧。 感谢任何帮助。 谢谢苏尼尔 问题答案: 如果要获取和处理两个连续标签之间的所有元素,则可以处理同级对象。这是一些示例代码:

  • 问题内容: 我正在抓取页面,并从该页面上的表中获取所有元素,如下所示: 输出: 现在,我试图获取标签的样式,但是我不知道如何。例如,如果我这样做: 它显然只是打印东西。我想我大概可以做这样的事情,比如,但一切到目前为止,我已经尝试并没有带来我想要的东西。 问题答案: 只需使用以下属性即可访问: 如果您只想要具有样式属性an的tr标记来获取全部标记: 或使用CSS选择器: 使用您的实际网址:

  • 问题内容: 我的链接看起来像这样 我想从那里去。我试过了 它输出。 我试过了,但它给了我KeyError。我该如何解决?我的错误是什么? 问题答案: 您可以使用css选择器,使用标题文本拉出所需的跨度: 找到具有包含 RAM 的 title 属性的 跨度 ,等效于在python中说。 或在 re.compile中 使用 find __ 要获取所有数据: 这会给你:

  • 问题内容: 使用BeautifulSoup bs4时,如何从HTML标签内部获取文本?当我运行此行时: 我得到这样的标签: 现在我只想获取其中的内部文本,不带标签。怎么做? 问题答案: 使用.text从标记中获取文本。 要不就 要打开文件并使用文本作为名称,请像使用其他任何字符串一样简单地使用它:

  • 我试图获取提供的html(跨度)之间的数据(在本例中为31) 以下是原始代码(来自chrome中的inspect elements) 我有一个包含页面源代码的富文本框,下面是相同的代码,但是在富文本框的第51行: 我将如何做到这一点?我已经尝试了几种方法,但似乎都不适合我。 我试图从这一页检索点值:http://www.subxcess.com/sub4sub.php根据谁潜艇你的数量变化。

  • 问题内容: 在中,我想找到标记以及两者之间的所有内容,如下所示: 我想找到标记以及之间的所有内容,然后将其删除。 标签之间的所有内容都是变量,但是我想在获得时删除整个标签和子标签。 有人知道该怎么做吗? 问题答案: 使用正则表达式进行HTML / XML解析不是一个好主意… 但是,如果仍然要执行此操作,请搜索正则表达式模式 并将其替换为空字符串…