...
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?
As saídas acima no meu terminal. Estou no Mac OS 10.7.x. Eu tenho o Python 2.7.1 e segui este tutorial para obter Beautiful Soup e lxml, que foram instalados com sucesso e funcionam com um arquivo de teste separado localizado aqui . No script Python que causa esse erro, incluí esta linha:
from pageCrawler import comparePages
E no arquivo pageCrawler, incluí as duas linhas a seguir:
from bs4 import BeautifulSoup
from urllib2 import urlopen
Qualquer ajuda para descobrir qual é o problema e como ele pode ser resolvido seria muito apreciada.
python
python-2.7
beautifulsoup
lxml
user3773048
fonte
fonte
html
um URL ou um conteúdo HTML?Respostas:
Suspeito que isso esteja relacionado ao analisador que o BS usará para ler o HTML. O documento está aqui , mas se você é como eu (no OSX), pode estar preso a algo que requer um pouco de trabalho:
Você notará que, na página de documentação do BS4 acima, eles apontam que, por padrão, o BS4 usará o analisador HTML incorporado do Python. Supondo que você esteja no OSX, a versão do Python incluída na Apple é a 2.7.2, que não é branda para a formatação de caracteres. Eu encontrei esse mesmo problema, então atualizei minha versão do Python para contornar isso. Fazer isso em um virtualenv minimizará interrupções em outros projetos.
Se isso soa como uma dor, você pode mudar para o analisador LXML:
E então tente:
Dependendo do seu cenário, isso pode ser bom o suficiente. Achei isso irritante o suficiente para garantir a atualização da minha versão do Python. Usando o virtualenv, você pode migrar seus pacotes com bastante facilidade.
fonte
python -c 'import requests ; from bs4 import BeautifulSoup ; r = requests.get("https://www.allrecipes.com/recipes/96/salad/") ; soup = BeautifulSoup(r.text, "lxml") '
requests
,bs4
elxml
antesBeautifulSoup
analisava o conteúdo da minha página da web.Para python básico pronto para uso com o bs4 instalado, você pode processar seu xml com
Se, no entanto, você quiser usar formatter = 'xml' , precisará
fonte
pip install html5lib
, após o qual tudo funcionou bem.bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?
se eu mudar parahtml.parser
ele funcionaEu preferi o analisador python html, sem instalação, sem dependências
soup = BeautifulSoup(s, "html.parser")
fonte
Estou usando o Python 3.6 e tive o mesmo erro original neste post. Depois de executar o comando:
resolveu meu problema
fonte
apt install python-lxml
Execute estes três comandos para garantir que todos os pacotes relevantes estejam instalados:
Em seguida, reinicie o IDE do Python, se necessário.
Isso deve cuidar de qualquer coisa relacionada a esse problema.
fonte
Em vez de usar o lxml, use html.parser, você pode usar este trecho de código:
fonte
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?
Embora o BeautifulSoup suporte o analisador HTML por padrão Se você quiser usar outros analisadores Python de terceiros, precisará instalar esse analisador externo como (lxml).
Mas se você não especificou nenhum analisador como parâmetro, receberá um aviso de que nenhum analisador foi especificado.
Para usar qualquer outro analisador externo, é necessário instalá-lo e depois especificá-lo. gostar
O analisador externo tem dependência de c e python, o que pode ter algumas vantagens e desvantagens.
fonte
Eu encontrei o mesmo problema. Descobri que o motivo era que eu tinha um pacote python six ligeiramente desatualizado.
A atualização do seu pacote de seis resolverá o problema:
fonte
sudo pip install six==1.10.0
Instale o analisador LXML no ambiente python.
Seu problema será resolvido. Você também pode usar o pacote python interno para o mesmo que:
Nota: O módulo "HTMLParser" foi renomeado para "html.parser" no Python3
fonte
Em algumas referências, use o segundo em vez do primeiro:
fonte
O erro está ocorrendo devido ao analisador que você está usando. Em geral, se você tiver um arquivo / código HTML, precisará usá-lo
html5lib
(a documentação pode ser encontrada aqui ) e, caso tenha um arquivo / dados XML, será necessário usá-lolxml
(a documentação pode ser encontrada aqui ). Você também pode usar olxml
código / arquivo HTML, mas às vezes isso gera um erro como acima. Portanto, é melhor escolher o pacote com sabedoria, com base no tipo de dados / arquivo. Você também pode usar ohtml_parser
módulo incorporado. Mas, isso também às vezes não funciona.Para mais detalhes sobre quando usar qual pacote, você pode ver os detalhes aqui
fonte
O parâmetro em branco resultará em um aviso para a melhor disponibilidade.
sopa = sopa bonita (html)
--------------- / UserWarning: nenhum analisador foi especificado explicitamente; portanto, estou usando o melhor analisador HTML disponível para este sistema ("html5lib"). Isso geralmente não é um problema, mas se você executar esse código em outro sistema ou em um ambiente virtual diferente, ele poderá usar um analisador diferente e se comportar de maneira diferente. ------- /
python - versão Python 3.7.7
PyCharm 19.3.4 CE
fonte