2015-06-18 110 views
1
from bs4 import BeautifulSoup 

page = """<span id="something">useless</span> 
      <span id="">some text</span> 
      <span id="different">useless</span>""" 
soup = BeautifulSoup(page) 

我如何才能獲得some text?使用soup.find_all('span', {'id': ""})可以找到一切。在BeautifulSoup中獲取具有空ID的標籤的內容

+0

什麼是您的bs4版本? 'soup.find_all('span',{'id':「」})'在'4.3.2'上工作 –

回答

1

你有兩個選擇:

  1. 使用自定義過濾器;傳遞一個功能,它會被要求返回TrueFalse的元素:

    soup.find_all(lambda e: e.name == 'span' and e.attrs.get('id') == '') 
    
  2. 使用CSS selector,用一個確切的屬性匹配:

    soup.select('span[id=""]') 
    

演示:

>>> from bs4 import BeautifulSoup 
>>> page = """<span id="something">useless</span> 
...   <span id="">some text</span> 
...   <span id="different">useless</span>""" 
>>> soup = BeautifulSoup(page) 
>>> soup.find_all(lambda e: e.name == 'span' and e.attrs.get('id') == '') 
[<span id="">some text</span>] 
>>> soup.select('span[id=""]') 
[<span id="">some text</span>] 
+0

有沒有辦法不返回列表?這樣我就可以應用更多的BeautifulSoup相關操作(例如'.find()')的'.text'? – MERose

+0

@MERose:你可以遍歷列表。如果您正在尋找* one *元素,請使用'soup.find()';它採用與'find_all()'完全相同的參數,但只返回第一個命中或None。 –

+1

@MERose:但是如果你想處理所有這樣的元素,循環遍歷'.find_all()'是你的最佳選擇。 –