bs4.FeatureNotFound : 요청한 기능을 가진 트리 빌더를 찾을 수 없습니다 : lxml. 파서 라이브러리를 설치해야합니까?


224
...
soup = BeautifulSoup(html, "lxml")
File "/Library/Python/2.7/site-packages/bs4/__init__.py", line 152, in __init__
% ",".join(features))
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?

위의 결과는 내 터미널에서 출력됩니다. Mac OS 10.7.x에 있습니다. Python 2.7.1이 있고이 자습서 를 따라 Beautiful Soup 및 lxml을 얻었습니다. 이는 성공적으로 설치되고 여기에 있는 별도의 테스트 파일로 작동 합니다 . 이 오류를 발생시키는 Python 스크립트에서이 줄을 포함 시켰습니다. from pageCrawler import comparePages 그리고 pageCrawler 파일에서 다음 두 줄을 포함했습니다. from bs4 import BeautifulSoup from urllib2 import urlopen

문제가 무엇인지, 어떻게 해결할 수 있는지 알아내는 데 도움이된다면 감사하겠습니다.



인가 html의 URL 또는 html로 내용은?
tommy.carstensen

답변:


227

BS가 HTML을 읽는 데 사용할 파서와 관련이 있다는 의혹이 있습니다. 그들은 문서가 여기 있지만, 당신이 나와 같은 경우 (OSX에서) 약간의 작업이 필요한 무언가가 붙어있을 수 있습니다.

위의 BS4 문서 페이지에서 기본적으로 BS4는 Python 내장 HTML 파서를 사용한다는 것을 알 수 있습니다. OSX에 있다고 가정하면 Apple 번들 버전의 Python은 2.7.2이며 문자 형식에는 적합하지 않습니다. 나는이 같은 문제에 부딪쳤다. 그래서 나는 그것을 해결하기 위해 파이썬 버전을 업그레이드했다. virtualenv에서이 작업을 수행하면 다른 프로젝트의 중단을 최소화 할 수 있습니다.

그렇게하는 것이 고통스럽게 들리면 LXML 파서로 전환 할 수 있습니다.

pip install lxml

그런 다음 시도하십시오.

soup = BeautifulSoup(html, "lxml")

시나리오에 따라 충분할 수 있습니다. 나는 내 파이썬 버전을 업그레이드 할만 큼 성가신 것을 발견했다. virtualenv를 사용하면 패키지를 상당히 쉽게 마이그레이션 할 수 있습니다.


1
pip 설치 후 테스트하려면python -c 'import requests ; from bs4 import BeautifulSoup ; r = requests.get("https://www.allrecipes.com/recipes/96/salad/") ; soup = BeautifulSoup(r.text, "lxml") '
ViFI

내 가상 ENV에, 내가 설치하는 데 필요한 requests, bs4그리고 lxml이전에 BeautifulSoup내 웹 페이지 콘텐츠를 구문 분석합니다.
noobninja

어이! 매드 맥, 맥 구매 결정에 대해 후회하지 않을 때 모르겠다!
이크 라.

48

bs4가 설치된 기본 파이썬의 경우 다음을 사용하여 XML을 처리 할 수 ​​있습니다.

soup = BeautifulSoup(html, "html5lib")

그러나 formatter = 'xml' 을 사용하려면 다음을 수행해야합니다.

pip3 install lxml

soup = BeautifulSoup(html, features="xml")

3
새로 분리 된 원격 서버에서 html5lib가 즉시 작동하지 않았습니다. 나는 여전히을해야했고 pip install html5lib그 후에 모든 것이 잘 작동했습니다.
petercoles 2014

나를 위해 작동하지 않았다 : bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?내가 그것을 변경 html.parser하면 작동합니다
8bitjunkie

41

나는 python html 파서 내장을 선호하고 설치가 필요하지 않습니다.

soup = BeautifulSoup(s, "html.parser")


@Ernst 동안 작동하지만 이전은 작동하지 않았습니다. 감사!
adrCoder

14

Python 3.6을 사용하고 있으며이 게시물에서 동일한 원래 오류가 발생했습니다. 명령을 실행 한 후 :

python3 -m pip install lxml

내 문제를 해결했다


Docker에서는 다음을 수행해야합니다.apt install python-lxml
Walter

14

다음 세 명령을 실행하여 모든 관련 패키지가 설치되어 있는지 확인하십시오.

pip install bs4
pip install html5lib
pip install lxml

그런 다음 필요한 경우 Python IDE를 다시 시작하십시오.

이 문제와 관련된 모든 것을 처리해야합니다.


1
이것이 실제 솔루션입니다.
존 스터드

8

lxml을 사용하는 대신 html.parser를 사용하면 다음 코드를 사용할 수 있습니다.

soup = BeautifulSoup(html, 'html.parser')

2
vendor.bs.bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html.parser. Do you need to install a parser library?
alex

4

BeautifulSoup은 기본적으로 HTML 파서를 지원하지만 다른 타사 파이썬 파서를 사용하려면 (lxml)과 같은 외부 파서를 설치해야합니다.

soup_object= BeautifulSoup(markup,"html.parser") #Python HTML parser

그러나 파서를 매개 변수로 지정하지 않으면 파서가 지정되지 않았다는 경고가 표시됩니다.

soup_object= BeautifulSoup(markup) #Warnning

다른 외부 파서를 사용하려면 해당 파서를 설치 한 다음 지정해야합니다. 처럼

pip install lxml

soup_object= BeautifulSoup(markup,'lxml') # C dependent parser 

외부 파서는 c와 python 의존성을 가지고 있으며 장점과 단점이 있습니다.


3

같은 문제가 발생했습니다. 그 이유는 내가 약간 오래된 파이썬 6 패키지를 가지고 있기 때문입니다.

>>> import html5lib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/html5lib/__init__.py", line 16, in <module>
    from .html5parser import HTMLParser, parse, parseFragment
  File "/usr/local/lib/python2.7/site-packages/html5lib/html5parser.py", line 2, in <module>
    from six import with_metaclass, viewkeys, PY3
ImportError: cannot import name viewkeys

6 개의 패키지를 업그레이드하면 문제가 해결됩니다.

sudo pip install six=1.10.0

sudo pip install six==1.10.0
pyd

2

파이썬 환경에서 LXML 파서를 설치하십시오.

pip install lxml

문제가 해결 될 것입니다. 다음과 같은 목적으로 내장 파이썬 패키지를 사용할 수도 있습니다.

soup = BeautifulSoup(s,  "html.parser")

참고 : Python3에서 "HTMLParser"모듈의 이름이 "html.parser"로 변경되었습니다.


0

일부 참고 문헌에서 첫 번째 대신 두 번째를 사용하십시오.

soup_object= BeautifulSoup(markup,'html-parser')
soup_object= BeautifulSoup(markup,'html.parser')

답변에 좀 더 자세한 내용을 제공해야합니다
Michael

0

사용중인 구문 분석기로 인해 오류가 발생합니다. 일반적으로 HTML 파일 / 코드가있는 경우 사용 html5lib(문서는 여기 참조 ) 및 XML 파일 / 데이터가있는 경우 사용 lxml(문서는 여기 참조 )해야합니다. lxmlHTML 파일 / 코드에도 사용할 수 있지만 때로는 위와 같은 오류가 발생합니다. 따라서 데이터 / 파일 유형에 따라 패키지를 현명하게 선택하는 것이 좋습니다. html_parser내장 모듈을 사용할 수도 있습니다 . 그러나 이것은 때때로 작동하지 않습니다.

패키지 사용시기에 대한 자세한 내용은 여기를 참조 하십시오.


0

빈 매개 변수는 사용 가능한 최상의 경고를 표시합니다.
수프 = BeautifulSoup (html)

--------------- / UserWarning : 구문 분석기가 명시 적으로 지정되지 않았으므로이 시스템에 가장 적합한 HTML 구문 분석기 ( "html5lib")를 사용하고 있습니다. 이것은 일반적으로 문제가되지 않지만 다른 시스템이나 다른 가상 환경에서이 코드를 실행하면 다른 파서를 사용하고 다르게 동작 할 수 있습니다 .--------------- ------- /

python --version 파이썬 3.7.7

PyCharm 19.3.4 CE

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.