Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用BeautifulSoup Python提取span标记之间的数据_Python_Beautifulsoup - Fatal编程技术网

使用BeautifulSoup Python提取span标记之间的数据

使用BeautifulSoup Python提取span标记之间的数据,python,beautifulsoup,Python,Beautifulsoup,我想提取span标记之间的数据。下面是一个html代码示例: <p> <span class="html-italic">3-Acetyl-</span> <span class="html-italic">(4-acetyl-5-(β</span> "-" <span class="html-italic">naphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)

我想提取span标记之间的数据。下面是一个html代码示例:

<p>
    <span class="html-italic">3-Acetyl-</span>
    <span class="html-italic">(4-acetyl-5-(β</span>
    "-"
    <span class="html-italic">naphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one</span>
     "("
    <b>5b</b>
</p>
非常感谢您的帮助

试着这样做:

name=""
for x in soup.find('p'):
    try:
        if x.name == 'span':
            name += x.get_text()
    except:pass
print name
输出:

3-Acetyl-(4-acetyl-5-(βnaphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one

你可以这样做

p = soup.find("p")
name = ""
for child in p.children:
    if child.name == "span":
        name += child.text
    elif child.name is 'None':
        name += child.string.rstrip("\"\n ").lstrip("\"\n ")
print name
你可以用


可以使用BeautifulSoup的
.findAll(text=True)
获取元素内部的所有文本,包括跨距外部的文本。这将返回一个文本部分列表,其中需要去掉空格和引号。我不确定您使用什么规则来排除最后一个
”(“5b
),但这可能与切片列表一样简单:

parts = soup.find("p").findAll(text=True)
name = ''.join(p.strip(string.whitespace + '"') for p in parts[:-3])
结果:

u'3-Acetyl-(4-acetyl-5-(β-naphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one'

如果您喜欢单行程序,您可以执行以下操作:

(your_item.find("p", {"attr": "value"})).find("span").get_text()

您可能还需要从“-”和“(”)中去掉引号。使用rstrip和lstrip您可以做到这一点,需要注意的是,这会遗漏跨距之外的
“-”
(应为β-萘基)。
u'3-Acetyl-(4-acetyl-5-(β-naphtyl)-4,5-dihydro-1,3,4-oxodiazol-2-yl)methoxy)-2H-chromen-2-one'
(your_item.find("p", {"attr": "value"})).find("span").get_text()