...
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?
Les sorties ci-dessus sur mon terminal. Je suis sous Mac OS 10.7.x. J'ai Python 2.7.1 et j'ai suivi ce tutoriel pour obtenir Beautiful Soup et lxml, qui ont tous deux été installés avec succès et fonctionnent avec un fichier de test distinct situé ici . Dans le script Python qui provoque cette erreur, j'ai inclus cette ligne:
from pageCrawler import comparePages
Et dans le fichier pageCrawler j'ai inclus les deux lignes suivantes:
from bs4 import BeautifulSoup
from urllib2 import urlopen
Toute aide pour déterminer quel est le problème et comment le résoudre serait très appréciée.
python
python-2.7
beautifulsoup
lxml
user3773048
la source
la source
html
une URL ou un contenu HTML?Réponses:
Je soupçonne que cela est lié à l'analyseur que BS utilisera pour lire le HTML. Ils documentent est ici , mais si vous êtes comme moi (sur OSX), vous pourriez être coincé avec quelque chose qui nécessite un peu de travail:
Vous remarquerez que dans la page de documentation BS4 ci-dessus, ils soulignent que par défaut BS4 utilisera l'analyseur HTML intégré Python. En supposant que vous êtes sous OSX, la version de Python fournie par Apple est 2.7.2, ce qui n'est pas indulgent pour le formatage des caractères. J'ai rencontré ce même problème, j'ai donc mis à niveau ma version de Python pour le contourner. Faire cela dans un virtualenv minimisera la perturbation des autres projets.
Si cela ressemble à une douleur, vous pouvez passer à l'analyseur LXML:
Et puis essayez:
Selon votre scénario, cela pourrait être suffisant. J'ai trouvé cela assez ennuyeux pour justifier la mise à niveau de ma version de Python. En utilisant virtualenv, vous pouvez migrer vos packages assez facilement.
la source
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
etlxml
avant d'BeautifulSoup
analyser le contenu de ma page Web.Pour python basique prêt à l'emploi avec bs4 installé, vous pouvez traiter votre xml avec
Si toutefois vous souhaitez utiliser formatter = 'xml', vous devez
la source
pip install html5lib
, après quoi tout fonctionnait bien.bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?
Ça n'a pas marché pour moi: si je le change,html.parser
ça marcheJ'ai préféré l'analyseur html intégré en python, pas d'installation ni de dépendances
soup = BeautifulSoup(s, "html.parser")
la source
J'utilise Python 3.6 et j'ai eu la même erreur d'origine dans ce post. Après avoir exécuté la commande:
cela a résolu mon problème
la source
apt install python-lxml
Exécutez ces trois commandes pour vous assurer que tous les packages appropriés sont installés:
Redémarrez ensuite votre IDE Python, si nécessaire.
Cela devrait s'occuper de tout ce qui touche à ce problème.
la source
Au lieu d'utiliser lxml, utilisez html.parser, vous pouvez utiliser ce morceau de code:
la source
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?
Bien que BeautifulSoup prenne en charge l'analyseur HTML par défaut Si vous souhaitez utiliser tout autre analyseur Python tiers, vous devez installer cet analyseur externe comme (lxml).
Mais si vous ne spécifiez aucun analyseur comme paramètre, vous obtiendrez un avertissement qu'aucun analyseur spécifié.
Pour utiliser tout autre analyseur externe, vous devez l'installer puis le spécifier. comme
L'analyseur externe a des dépendances c et python qui peuvent avoir certains avantages et inconvénients.
la source
J'ai rencontré le même problème. J'ai trouvé la raison en est que j'avais un paquet python six légèrement obsolète.
La mise à niveau de votre package six résoudra le problème:
la source
sudo pip install six==1.10.0
Installez l'analyseur LXML dans un environnement python.
Votre problème sera résolu. Vous pouvez également utiliser le package python intégré pour la même chose que:
Remarque: Le module "HTMLParser" a été renommé "html.parser" en Python3
la source
Dans certaines références, utilisez la seconde au lieu de la première:
la source
L'erreur vient à cause de l'analyseur que vous utilisez. En général, si vous avez un fichier / code HTML, vous devez utiliser
html5lib
(la documentation peut être trouvée ici ) et au cas où vous avez un fichier / des données XML, alors vous devez utiliserlxml
(la documentation peut être trouvée ici ). Vous pouvez également utiliserlxml
pour le fichier / code HTML mais parfois cela donne une erreur comme ci-dessus. Il vaut donc mieux choisir judicieusement le package en fonction du type de données / fichier. Vous pouvez également utiliser lehtml_parser
module intégré. Mais, cela aussi parfois ne fonctionne pas.Pour plus de détails sur le moment d’utiliser quel package vous pouvez voir les détails ici
la source
Un paramètre vide entraînera un avertissement pour la meilleure disponibilité.
soupe = BeautifulSoup (html)
--------------- / UserWarning: Aucun analyseur n'a été explicitement spécifié, donc j'utilise le meilleur analyseur HTML disponible pour ce système ("html5lib"). Ce n'est généralement pas un problème, mais si vous exécutez ce code sur un autre système ou dans un environnement virtuel différent, il peut utiliser un analyseur différent et se comporter différemment .--------------- ------- /
python --version Python 3.7.7
PyCharm 19.3.4 CE
la source