에는 속성 '항목을'이 없으며 (http://djangosnippets.org/snippets/1655/에 의해 거의 전적으로), 나는 아래의 코드를 사용하고 입력에서 속성 :'목록'객체는 파이썬의 BeautifulSoup로의 renderContents 원치 않는/안전하지 않은 태그를 제거하기위한 시도에서
def html_filter(value, allowed_tags = 'p h1 h2 h3 div span a:href:title img:src:alt:title table:cellspacing:cellpadding th tr td:colspan:rowspan ol ul li br'):
js_regex = re.compile(r'[\s]*(&#x.{1,7})?'.join(list('javascript')))
allowed_tags = [tag.split(':') for tag in allowed_tags.split()]
allowed_tags = dict((tag[0], tag[1:]) for tag in allowed_tags)
soup = BeautifulSoup(value)
for comment in soup.findAll(text=lambda text: isinstance(text, Comment)):
comment.extract()
for tag in soup.findAll(True):
if tag.name not in allowed_tags:
tag.hidden = True
else:
tag.attrs = [(attr, js_regex.sub('', val)) for attr, val in tag.attrs.items() if attr in allowed_tags[tag.name]]
return soup.renderContents().decode('utf8')
불필요하거나 허용 된 태그, 허용되지 않는 HTML, 심지어 형식이 잘못된 HTML 태그에도 잘 작동합니다. 그러나 허용 목록에있는 속성이 있으면 마지막 줄에
'list' object has no attribute 'items'
을 발생시켜 도움이되지 않습니다. type(soup)
은 오류 발생 여부와 상관없이 <class 'bs4.BeautifulSoup'>
입니다. 그래서 나는 그것이 무엇을 언급하는지 알지 못합니다.
Traceback:
[...]
File "C:\Users\Mark\Web\www\fnwidjango\src\base\functions\html_filter.py" in html_filter
30. return soup.renderContents().decode('utf8')
File "C:\Python27\lib\site-packages\bs4\element.py" in renderContents
1098. indent_level=indentLevel, encoding=encoding)
File "C:\Python27\lib\site-packages\bs4\element.py" in encode_contents
1089. contents = self.decode_contents(indent_level, encoding, formatter)
File "C:\Python27\lib\site-packages\bs4\element.py" in decode_contents
1074. formatter))
File "C:\Python27\lib\site-packages\bs4\element.py" in decode
1021. indent_contents, eventual_encoding, formatter)
File "C:\Python27\lib\site-packages\bs4\element.py" in decode_contents
1074. formatter))
File "C:\Python27\lib\site-packages\bs4\element.py" in decode
1021. indent_contents, eventual_encoding, formatter)
File "C:\Python27\lib\site-packages\bs4\element.py" in decode_contents
1074. formatter))
File "C:\Python27\lib\site-packages\bs4\element.py" in decode
1021. indent_contents, eventual_encoding, formatter)
File "C:\Python27\lib\site-packages\bs4\element.py" in decode_contents
1074. formatter))
File "C:\Python27\lib\site-packages\bs4\element.py" in decode
983. for key, val in sorted(self.attrs.items()):
Exception Type: AttributeError at /"nieuws"/article/3-test/
Exception Value: 'list' object has no attribute 'items'
'tag.attrs'는 사전이 아니겠습니까? (하나부터 시작해서 목록으로 바꿨다) – mgilson
왜 내가 그걸 바꿨는지 기억하고있다. 내가 다시 바꿨을 때 아무 것도 고장난 것 같지 않다. 아마 내 뇌 기능이 제대로 작동하지 않았을 것이다. – Mark