2012-07-17 90 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']}]