如何使用beautifulsoup在span标签之间抓取

bill999

我正在尝试使用python + beautifulsoup抓取文本。我输入如下代码:

soup.find_all("span")[0]

这让我:

<span style="margin-right: 0.9em">TEXT1 <span style="color:
#111111; margin-left: 0.2em">TEXT2 </span>TEXT3 </span>

这很棒。但问题是,我想提取TEXT1TEXT2TEXT3分别。

我不知道该怎么做。如果我做:

soup.find_all(“ span”)[0] .find_all(“ span”),我只会

<span style="color:
#111111; margin-left: 0.2em">TEXT2 </span>

我认为这是因为这个特定的元素同时包含<span></span>如何挑选TEXT1TEXT2TEXT3

杰德沃兹

稍微格式化一下,我们就能看到您拥有什么样的结构:

<span style="margin-right: 0.9em">
    TEXT1 
    <span style="color:#111111; margin-left: 0.2em">
        TEXT2 
    </span>
    TEXT3
</span>

所以,很遗憾,我们不能用一种方法像这样的,因为我们要访问的NavigableText在多个深度元素。

一种实现方法是创建一个函数,该函数递归检查某个给定元素的子元素(context在以下函数中称为),如果它们是NavigableText元素,则将它们收集起来并返回。

考虑:

from bs4.element import NavigableString, Tag

def extractNavigableStrings(context):
    strings = []
    for e in context.children:
        if isinstance(e, NavigableString):
            strings.append(e)
        if isinstance(e, Tag):
            strings.extend(extractNavigableStrings(e))
    return strings

我们可以在您的输入上运行:

from bs4 import BeautifulSoup
from bs4.element import NavigableString, Tag

def extractNavigableStrings(context):
    strings = []
    for e in context.children:
        if isinstance(e, NavigableString):
            strings.append(e)
        if isinstance(e, Tag):
            strings.extend(extractNavigableStrings(e))
    return strings

soup = BeautifulSoup('''<span style="margin-right: 0.9em">TEXT1 <span style="color: #111111; margin-left: 0.2em">TEXT2 </span>TEXT3 </span>''')

print(extractNavigableStrings(soup))

print函数显示我们的列表NavigableStrings

[u'TEXT1',u'TEXT2',u'TEXT3']

请注意,返回列表的元素不是python字符串,它们是NavigableString元素-打印它们很好,但是如果要获取字符串内容,则需要unicode(<element>)例如:

nss = extractNavigableStrings(soup)
strings = [unicode(ns.string) for ns in nss]
print strings  # [u'TEXT1 ', u'TEXT2 ', u'TEXT3 ']

for s in strings: print type(s), s
# <type 'unicode'> TEXT1
# <type 'unicode'> TEXT2
# <type 'unicode'> TEXT3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用BeautifulSoup抓取缺少标签的网页

如何使用jQuery更改<span>标签</ span>之间的值?

如何使用BeautifulSoup抓取<h1>标签?[蟒蛇]

如何使用beautifulSoup从<td>标签分别抓取数据?

如何从使用BeautifulSoup抓取的列表中删除标签?

如何使用 BeautifulSoup 在“ul”标签下抓取数组的值?

使用BeautifulSoup提取<span> WITH标签

如何使用beautifulsoup和python在span标签中获取文本

如何使用<span>标签BeautifulSoup获取<li>内部的每个值

如何在BeautifulSoup的li标签之间的span标签中获取文本?

如何从span标签内抓取在线数据

如何从span标签中抓取字典?

使用 Python 和 BeautifulSoup 抓取 alt 标签

使用BeautifulSoup抓取预标签内的文本

无法使用BeautifulSoup抓取嵌套标签

使用beautifulsoup从脚本标签中抓取数据

无法使用 Beautifulsoup 正确抓取 <strong> 标签

从在BeautifulSoup中包含嵌套span标签的span标签中抓取文本

如何使用javascript / jquery在span标签之间获取值

如何使用BeautifulSoup抓取HTML?

如何使用BeautifulSoup从页面抓取

如何使用 Python、Selenium 和 BeautifulSoup 从 HTML <span id> 中抓取此文本?

如何使用BeautifulSoup刮擦标签之间的嵌套文本?

如何使用Beautiful Soup在Python中的span标签内抓取文本

如何使用beautifulsoup在另一个标签内的span标签内获取文本?

抓取标签属性 BeautifulSoup

如何使用BeautifulSoup4从客户标签中抓取信息

标签之间的抓取抓取网址

使用 BeautifulSoup 从 <a> 中抓取一系列链接(在其他两个标签之间)