从python BeautifulSoup的输出中删除新行'\ n'

Ani*_*ish 4 python beautifulsoup

我正在使用python Beautiful汤来获取以下内容:

<div class="path">
    <a href="#"> abc</a>
    <a href="#"> def</a>
    <a href="#"> ghi</a>
</div>
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

html_doc="""<div class="path">
    <a href="#"> abc</a>
    <a href="#"> def</a>
    <a href="#"> ghi</a>
</div>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)

path = soup.find('div',attrs={'class':'path'})
breadcrum = path.findAll(text=True)

print breadcrum
Run Code Online (Sandbox Code Playgroud)

输出如下,

[u'\n', u'abc', u'\n', u'def', u'\n', u'ghi',u'\n']
Run Code Online (Sandbox Code Playgroud)

如何只以这种形式获取结果:abc,def,ghi作为单个字符串?

我也想知道这样获得的输出。

小智 6

如果您只是删除面包屑中的项目,您最终会在列表中得到空项目。您可以按照 shaktimaan 的建议进行操作,然后使用

breadcrum = filter(None, breadcrum)
Run Code Online (Sandbox Code Playgroud)

或者您可以事先将它们全部剥离(在 html_doc 中):

mystring = mystring.replace('\n', ' ').replace('\r', '')
Run Code Online (Sandbox Code Playgroud)

无论哪种方式都可以获取字符串输出,请执行以下操作:

','.join(breadcrum)
Run Code Online (Sandbox Code Playgroud)


sha*_*aan 5

您可以这样做:

breadcrum = [item.strip() for item in breadcrum if str(item)]
Run Code Online (Sandbox Code Playgroud)

if str(item)剥离的新行字符后会照顾摆脱空列表项。

如果要加入字符串,请执行以下操作:

','.join(breadcrum)
Run Code Online (Sandbox Code Playgroud)

这会给你 abc,def,ghi

编辑

尽管上面提供了您想要的内容,正如该线程中的其他人所指出的那样,但是使用BS提取锚文本的方式并不正确。一旦您有div兴趣,就应该使用它来获取它的子项,然后获取锚文本。如:

path = soup.find('div',attrs={'class':'path'})
anchors = path.find_all('a')
data = []
for ele in anchors:
    data.append(ele.text)
Run Code Online (Sandbox Code Playgroud)

然后做一个 ','.join(data)