2016-08-22 10 views
3

html5lib을 설치하려고합니다. 처음에 최신 버전 (8 또는 9)을 설치하려고했지만 BeautifulSoup과 충돌하여 이전 버전 (0.9999999, seven nines)을 사용하기로 결정했습니다. 나는 그것을 설치,하지만 난 그것을 사용하려고하면html5lib : TypeError : __init __() 예상치 못한 키워드 인수 '인코딩'이 있습니다.

이 어떤 문제가
Traceback (most recent call last): 
    File "<pyshell#11>", line 2, in <module> 
    document = html5lib.parse(f, encoding=f.info().get_content_charset()) 
    File "C:\Python\Python35-32\lib\site-packages\html5lib\html5parser.py", line 35, in parse 
    return p.parse(doc, **kwargs) 
    File "C:\Python\Python35-32\lib\site-packages\html5lib\html5parser.py", line 235, in parse 
    self._parse(stream, False, None, *args, **kwargs) 
    File "C:\Python\Python35-32\lib\site-packages\html5lib\html5parser.py", line 85, in _parse 
    self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs) 
    File "C:\Python\Python35-32\lib\site-packages\html5lib\_tokenizer.py", line 36, in __init__ 
    self.stream = HTMLInputStream(stream, **kwargs) 
    File "C:\Python\Python35-32\lib\site-packages\html5lib\_inputstream.py", line 151, in HTMLInputStream 
    return HTMLBinaryInputStream(source, **kwargs) 
TypeError: __init__() got an unexpected keyword argument 'encoding' 

내가 무엇을해야합니까 :

>>> with urlopen("http://example.com/") as f: 
    document = html5lib.parse(f, encoding=f.info().get_content_charset()) 

는 오류가 발생합니다?

답변

6

나는 html5lib.treebuilders._base이 BS4를 usng하는 최신 호환 버전 7 석장과 하나가 될 것으로 보인다 4.4.1, 이상이 더있다, 뭔가 BS4에 관하여 html5lib의 최신 버전에서 부서졌다 볼 수 없습니다 잘 작동 다음과 같이 당신이 그것을 설치하면 : 이름이 변경되었습니다 Rename treebuilders._base to .base to reflect public status를 저지 당신이 변화를 볼 수 있습니다

In [1]: import bs4 

In [2]: bs4.__version__ 
Out[2]: '4.4.1' 

In [3]: import html5lib 

In [4]: html5lib.__version__ 
Out[4]: '0.9999999' 

In [5]: from urllib.request import urlopen 

In [6]: with urlopen("http://example.com/") as f: 
    ...:   document = html5lib.parse(f, encoding=f.info().get_content_charset()) 
    ...:  

In [7]: 

:

pip3 install -U html5lib=="0.9999999" 

는 BS4 4.4.1를 사용하여 테스트

) (

class HTMLBinaryInputStream(HTMLUnicodeInputStream): 
    """Provides a unicode stream of characters to the HTMLTokenizer. 

    This class takes care of character encoding and removing or replacing 
    incorrect byte-sequences and also provides column and line tracking. 

    """ 

    def __init__(self, source, override_encoding=None, transport_encoding=None, 
       same_origin_parent_encoding=None, likely_encoding=None, 
       default_encoding="windows-1252", useChardet=True): 

설정 override_encoding = f.info : 617,451,515,

여전히 html5lib/_inputstream.py, HTMLBinaryInputStream에, 최신 버전을 사용하고 있기 때문에 표시되는 오류가 어떤 인코딩 인수가 없습니다 .get_content_charset() 트릭을해야합니다.

In [16]: bs4.__version__ 
Out[16]: '4.5.1' 

In [17]: html5lib.__version__ 
Out[17]: '0.999999999' 

In [18]: with urlopen("http://example.com/") as f: 
      document = html5lib.parse(f, override_encoding=f.info().get_content_charset()) 
    ....:  

In [19]: 
: 또한 BS4의 최신 버전으로 업그레이드

는 html5lib의 최신 버전 잘 작동

관련 문제