2014-01-08 35 views
2
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from bs4 import BeautifulSoup 
import re 
doc = "<div>Text text <span class='_ _3'>empty</span> text</div>" 
soup = BeautifulSoup(doc) 
for span in soup.find_all('span' , class_=re.compile("_\s_[0-9]+")) : 
    span.decompose() 

需要找到所有與<span class=_ _\d+>標籤和DOM刪除。但是這段代碼由於某種原因而不起作用!python bs4分析器類中的錯誤?

回答

2

BeautifulSoup將你的課程分爲一個列表;正則表達式在多個類上不匹配。 class是一組這樣的屬性之一,參見Multi-valued attributes

你必須使用自定義的函數,在使用正則表達式多個類別進行過濾:

def underscored_class_span(elem, numbered=re.compile(u'_\d').match): 
    if elem.name != 'span': return False 
    classes = elem.get('class', []) 
    return u'_' in classes and any(numbered(c) for c in classes) 

for span in soup.find_all(underscored_class_span): 
    span.decompose() 
+0

它的工作!謝謝 ;-) –