2012-07-17 94 views
0

只有在text=True未指定标记时才有获取HTML标记属性的方法。BeautifulSoup:提取HTML标记属性

例子:

html=<p class="c4">SOMETEXT</p> 

我可以这样做:

[tag.attrs for tag in soup.findAll('p')] 
>>> [[(u'class', u'c1')]] 

有没有办法做到:

[text.attrs for text in soup.findAll(text=True)] 

帮助大大appriciated!

回答

3

想你想这是问题已经得到澄清:

[tag.attrs for tag in soup.findAll(True) if tag.string] 

.findAll(True)回报文档中的所有标签,所以他们将有一个.attr即使它是空的,并筛选如果标签具有内容为.string

+0

谢谢,也许这个问题很糟糕,但我的意思是在text = True时获取attrs,而不指定标签名称。 – root 2012-07-17 09:27:03

+0

@root好的,在那种情况下,你是否真的试着运行你在“有办法做到的事情”中提到的代码?因为我相信这真的会起作用......(虽然我不称它为'文本',但'标签'可能会是一个更好的名称) – 2012-07-17 09:28:46

+0

我尝试过,但得到了错误:回溯(最近一次调用最后一次): 文件“”第1行 文件“C:\ Python26 \ lib \ site-packages \ BeautifulSoup.py”,第473行,在__getattr__ 引发AttributeError,“'%s'对象没有任何属性'%s'“%(self .__ class __.__ name__,attr) AttributeError:'声明'对象没有属性'attrs' – root 2012-07-17 09:31:08

0
>>> from bs4 import BeautifulSoup as bs 
>>> html = '<p class="c4">SOMETEXT</p><p class="c5"></p>' 
>>> soup = bs(html) 
>>> [tag.attrs for tag in soup.findAll('p') if tag.string] 
[{'class': ['c4']}]