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)
您可以这样做:
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)