2014-01-08 2 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 analyzer 클래스의 버그?

답변

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

! 감사 ;-) –