J'utilise python 2,7,5 sur mac 10.7.5, beautifulsoup 4.2.1. Je vais analyser une page xml en utilisant la bibliothèque lxml, comme enseigné dans le tutoriel beautifulsoup. Cependant, lorsque Je lance mon code, ça se voit
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested:
lxml,xml. Do you need to install a parser library?
Je suis sûr que j'ai déjà installé lxml par toutes les méthodes: easy_install, pip, port, etc. J'ai essayé d'ajouter une ligne à mon code pour voir si lxml est installé ou non:
import lxml
Alors python peut simplement passer avec succès ce code et afficher à nouveau le message d'erreur précédent, se produisant sur la même ligne.
Je suis donc tout à fait sûr que lxml a été installé, mais pas installé correctement. J'ai donc décidé de désinstaller lxml, puis de le réinstaller en utilisant une méthode "correcte". Mais quand je tape
easy_install -m lxml
ça montre:
Searching for lxml
Best match: lxml 3.2.1
Processing lxml-3.2.1-py2.7-macosx-10.6-intel.Egg
Using /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-
3.2.1-py2.7-macosx-10.6-intel.Egg
Because this distribution was installed --multi-version, before you can
import modules from this package in an application, you will need to
'import pkg_resources' and then use a 'require()' call similar to one of
these examples, in order to select the desired version:
pkg_resources.require("lxml") # latest installed version
pkg_resources.require("lxml==3.2.1") # this exact version
pkg_resources.require("lxml>=3.2.1") # this version or higher
Processing dependencies for lxml
Finished processing dependencies for lxml
Je ne sais donc pas comment continuer ma désinstallation ...
J'ai recherché de nombreux messages sur ce problème sur Google, mais je ne trouve toujours pas d'informations utiles.
Voici mon code:
import mechanize
from bs4 import BeautifulSoup
import lxml
class count:
def __init__(self,protein):
self.proteinCode = protein
self.br = mechanize.Browser()
def first_search(self):
#Test 0
soup = BeautifulSoup(self.br.open("http://www.ncbi.nlm.nih.gov/protein/21225921?report=genbank&log$=prottop&blast_rank=1&RID=YGJHMSET015"), ['lxml','xml'])
return
if __name__=='__main__':
proteinCode = sys.argv[1]
gogogo = count(proteinCode)
Je veux savoir:
J'utilise BeautifulSoup 4.3.2 et OS X 10.6.8. J'ai également un problème avec lxml
mal installé. Voici certaines choses que j'ai découvertes:
Tout d'abord, vérifiez cette question connexe: MacPorts supprimés, maintenant Python est cassé
Maintenant, afin de vérifier quels constructeurs pour BeautifulSoup 4 sont installés, essayez
>>> import bs4
>>> bs4.builder.builder_registry.builders
Si vous ne voyez pas votre générateur préféré, alors il n'est pas installé et vous verrez une erreur comme ci-dessus ("Impossible de trouver un générateur d'arborescence ...").
De plus, juste parce que vous pouvez import lxml
, ne veut pas dire que tout est parfait.
Essayer
>>> import lxml
>>> import lxml.etree
Pour comprendre ce qui se passe, accédez au bs4
installation et ouvrez Egg (tar -xvzf
). Remarquez les modules bs4.builder
. À l'intérieur, vous devriez voir des fichiers tels que _lxml.py
et _html5lib.py
. Vous pouvez donc également essayer
>>> import bs4.builder.htmlparser
>>> import bs4.builder._lxml
>>> import bs4.builder._html5lib
S'il y a un problème, vous verrez pourquoi un module parriculaire ne peut pas être chargé. Vous pouvez voir comment à la fin de builder/__init__.py
il charge tous ces modules et ignore tout ce qui n'a pas été chargé:
# Builders are registered in reverse order of priority, so that custom
# builder registrations will take precedence. In general, we want lxml
# to take precedence over html5lib, because it's faster. And we only
# want to use HTMLParser as a last result.
from . import _htmlparser
register_treebuilders_from(_htmlparser)
try:
from . import _html5lib
register_treebuilders_from(_html5lib)
except ImportError:
# They don't have html5lib installed.
pass
try:
from . import _lxml
register_treebuilders_from(_lxml)
except ImportError:
# They don't have lxml installed.
pass
Si vous utilisez Python2.7 dans Ubuntu/Debian, cela a fonctionné pour moi:
$ Sudo apt-get build-dep python-lxml
$ Sudo pip install lxml
Testez-le comme:
mona@Pascal:~/computer_vision/image_retrieval$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml
FWIW, j'ai rencontré un problème similaire (python 3.6, os x 10.12.6) et j'ai pu le résoudre simplement en faisant (la première commande est juste pour signifier que je travaillais dans une conda virtualenv):
$ source activate ml-general
$ pip uninstall lxml
$ pip install lxml
J'ai d'abord essayé des choses plus compliquées, car BeautifulSoup fonctionnait correctement avec une commande identique via Jupyter + iPython, mais pas via le terminal de PyCharm dans le même virtualenv. Réinstaller simplement lxml comme ci-dessus a résolu le problème.
apt-get sur Debian/Ubuntu: Sudo apt-get install python3-lxml
Pour MacOS-X, un macport de lxml est disponible. Essayez quelque chose comme Sudo port install py27-lxml
http://lxml.de/installation.html peut être utile.