source

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

bestscript 2023. 1. 26. 09:15

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로 문자 포맷에 관대하지 않습니다.같은 문제에 부딪혔기 때문에 Python 버전을 업그레이드하여 문제를 해결했습니다.이를 가상환경에서 수행하면 다른 프로젝트의 중단을 최소화할 수 있습니다.

번거롭게 느껴질 경우 LXML 파서로 전환할 수 있습니다.

pip install lxml

그 후, 다음과 같이 해 주세요.

soup = BeautifulSoup(html, "lxml")

시나리오에 따라서는 그걸로 충분할 수도 있어요.Python 버전을 업그레이드 할 수 있을 만큼 성가신 일이었습니다.virtualenv를 사용하면 패키지를 매우 쉽게 마이그레이션할있습니다.

기본 제공 python html 파서를 선호합니다. 설치는 필요 없습니다.

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

bs4가 설치된 기본 python의 경우 xml을 처리할 수 있습니다.

soup = BeautifulSoup(html, "html5lib")

formatter='xml'을 사용하려면 다음 작업을 수행해야 합니다.

pip3 install lxml

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

다음 3가지 명령을 실행하여 관련된 패키지가 모두 설치되어 있는지 확인합니다.

pip install bs4
pip install html5lib
pip install lxml

그런 다음 필요에 따라 Python IDE를 다시 시작합니다.

그러면 이 문제에 관련된 모든 것이 해결됩니다.

사실 다른 작품에서 언급한 옵션 중 3가지입니다.

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

# 2. 
pip install lxml
soup_object= BeautifulSoup(markup,'lxml') # C dependent parser 

# 3.
pip install html5lib
soup_object= BeautifulSoup(markup,'html5lib') # C dependent parser 

Python 환경에 LXML 파서를 설치합니다.

pip install lxml

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

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

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

Python 3.6을 사용하고 있는데, 이 투고에서도 같은 에러가 있었습니다.명령어를 실행한 후:

python3 -m pip install lxml

그것은 나의 문제를 해결했다.

lxml use html.parser 대신 다음 코드를 사용할 수 있습니다.

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

BeautifulSoup은 기본적으로 HTML 파서를 지원하지만 다른 서드파티 Python 파서를 사용하려면 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 의존성을 가지며 장점과 단점이 있을 수 있습니다.

같은 문제가 발생했습니다.그 이유는 python 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

의 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.lxml그래서 업데이트했고 이것으로 문제가 해결되었습니다.

sudo python3 -m pip install lxml --upgrade

일부 참조에서는 첫 번째 참조 대신 두 번째 참조를 사용합니다.

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

사용하고 있는 파서 때문에 에러가 발생하고 있습니다. 파일 "/" 를 사용해야 .html5lib(여기서 문서를 참조할 수 있습니다).XML 파일/데이터가 있는 경우, 그 후 사용할 필요가 있습니다.lxml(자세한 내용은 여기를 참조해 주세요.사용할 수 있습니다.lxmlHTML 파일/코드에도 해당되지만 위와 같은 오류가 발생할 수 있습니다.따라서 데이터/파일 형식을 기준으로 패키지를 현명하게 선택하는 것이 좋습니다. 이 경우에도 하실 수 있습니다.html_parser내장 모듈입니다.하지만, 이 또한 때때로 효과가 없습니다.

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

빈 매개 변수는 사용 가능한 최상의 경고로 표시됩니다.
= Soup = 뷰티풀 수프 (html)

-----------------------------/사용자 경고:파서는 명시적으로 지정되어 있지 않기 때문에, 이 시스템에 최적인 HTML 파서("html5lib")를 사용하고 있습니다.이것은 보통 문제가 되지 않습니다만, 다른 시스템이나 다른 가상 환경에서 이 코드를 실행하면 다른 파서를 사용하여 다른 동작을 할 수 있습니다.-------------------------------------------------------------------------------------------------

python --version Python 3.7.7

PyCharm 19.3.4 CE

제 해결책은 이 시스템을lxml콘다에서 pip으로 다시 설치합니다.

pycharm에 python 3.8을 사용하고 있습니다.작업을 시작하기 전에 "lxml"을 설치하지 않았을 것입니다.제가 한 일은 다음과 같습니다.


  1. [파일] -> [설정]으로 이동합니다.
  2. 설정 좌측 메뉴바에서 [Python Interpreter]를 선택하고 [Python Interpreter]를 선택합니다.
  3. 패키지 목록 위에 있는 "+" 아이콘을 클릭합니다.
  4. "lxml"을 검색합니다.
  5. [ Available Package ](사용 가능한 패키지) 창의 왼쪽 하단에 있는 [Install Package](패키지 설치)를 클릭합니다.

이 방법은 나에게 효과가 있었다.저는 가상 환경에서 이 작업을 수행했다고 말씀드리고 싶습니다.첫 번째:

pip install --upgrade bs4

두 번째로, 저는 다음과 같이 했습니다.

html.parser

대신

html5lib

아래 변경사항으로 수정하였습니다.

변경 전

soup = BeautifulSoup(r.content, 'html5lib' )
print (soup.prettify())

변경 후

soup = BeautifulSoup(r.content, features='html')
print(soup.prettify())

코드가 올바르게 동작합니다.

기본적으로 BS4는 HTML 문서를 요구합니다.따라서 XML 문서를 HTML 문서로 해석합니다.통과하다features="xml"컨스트럭터의 인수로 사용됩니다.이것으로 문제가 해결되었다.

여러 버전의 Python이 설치되어 있는 경우 올바른 인터프리터를 사용하고 있는지 다시 한 번 확인할 수 있습니다.

올바른 버전의 Python을 선택하면 lxml이 검색되었습니다.

언급URL : https://stackoverflow.com/questions/24398302/bs4-featurenotfound-couldnt-find-a-tree-builder-with-the-features-you-requeste