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

...
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

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



답변

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

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

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

pip install lxml

그런 다음 시도하십시오.

soup = BeautifulSoup(html, "lxml")

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


답변

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

soup = BeautifulSoup(html, "html5lib")

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

pip3 install lxml

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


답변

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

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


답변

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

python3 -m pip install lxml

내 문제를 해결했다


답변

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

pip install bs4
pip install html5lib
pip install lxml

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

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


답변

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

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


답변

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 의존성을 가지고 있으며 장점과 단점이 있습니다.