bs4.FeatureNotFound: आपके द्वारा अनुरोधित सुविधाओं के साथ ट्री बिल्डर नहीं मिल सका: lxml। क्या आपको पार्सर लाइब्रेरी स्थापित करने की आवश्यकता है?


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

मेरे टर्मिनल पर उपरोक्त आउटपुट। मैं मैक ओएस 10.7.x पर हूं। मेरे पास पायथन 2.7.1 है, और सुंदर सूप और एलएक्सएमएल पाने के लिए इस ट्यूटोरियल का अनुसरण किया , जो दोनों सफलतापूर्वक स्थापित हुए और यहां स्थित एक अलग परीक्षण फ़ाइल के साथ काम करते हैं । पायथन स्क्रिप्ट में जो इस त्रुटि का कारण बनता है, मैंने इस पंक्ति को शामिल किया है: from pageCrawler import comparePages और पेज क्रॉलर फ़ाइल में मैंने निम्नलिखित दो चरण शामिल किए हैं: from bs4 import BeautifulSoup from urllib2 import urlopen

समस्या क्या है और इसे कैसे सुलझाया जा सकता है, यह जानने में बहुत मदद की जाएगी।



है htmlएक यूआरएल या एक एचटीएमएल सामग्री?
tommy.carstensen 15

जवाबों:


227

मुझे संदेह है कि यह उस पार्सर से संबंधित है जिसे बीएस HTML पढ़ने के लिए उपयोग करेगा। वे दस्तावेज़ यहाँ हैं , लेकिन अगर आप मेरे (OSX पर) हैं, तो आप किसी ऐसी चीज़ के साथ फंस सकते हैं, जिसके लिए थोड़ा काम करना होगा:

आप देखेंगे कि ऊपर बीएस 4 प्रलेखन पृष्ठ में, वे बताते हैं कि डिफ़ॉल्ट रूप से बीएस 4 पायथन अंतर्निहित एचटीएमएल पार्सर का उपयोग करेगा। मान लें कि आप OSX में हैं, तो Python का Apple-बंडल किया गया संस्करण 2.7.2 है जो वर्ण स्वरूपण के लिए उत्तरदायी नहीं है। मैंने इसी समस्या को मारा, इसलिए मैंने इसके चारों ओर काम करने के लिए पायथन के अपने संस्करण को अपग्रेड किया। एक virtualenv में ऐसा करने से अन्य परियोजनाओं में व्यवधान कम हो जाएगा।

यदि ऐसा करने से दर्द महसूस होता है, तो आप LXML पार्सर पर जा सकते हैं:

pip install lxml

और फिर कोशिश करें:

soup = BeautifulSoup(html, "lxml")

आपके परिदृश्य के आधार पर, यह काफी अच्छा हो सकता है। मैंने पायथन के अपने संस्करण को अपग्रेड करने के लिए इसे बहुत कष्टप्रद पाया। Virtualenv का उपयोग करके, आप अपने पैकेजों को काफी आसानी से स्थानांतरित कर सकते हैं


1
पाइप स्थापित करने के बाद परीक्षण करने के लिए:python -c 'import requests ; from bs4 import BeautifulSoup ; r = requests.get("https://www.allrecipes.com/recipes/96/salad/") ; soup = BeautifulSoup(r.text, "lxml") '
ViFI

मेरी आभासी env में, मैं स्थापित करने के लिए की जरूरत है requests, bs4और lxmlइससे पहले कि BeautifulSoupमेरे वेबपेज सामग्री पार्स होगा।
noobninja

उफ़! मैड मैक, मुझे नहीं पता कि मैं मैक खरीदने के अपने फैसले पर पछतावा कब करूँगा!
इकरा

48

Bs4 स्थापित बॉक्स python के मूल के लिए तब आप अपने xml के साथ प्रक्रिया कर सकते हैं

soup = BeautifulSoup(html, "html5lib")

यदि आप फॉर्मेटर = 'xml' का उपयोग करना चाहते हैं तो आपको करने की आवश्यकता है

pip3 install lxml

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

3
रिमोट सर्वर पर एक नए स्पैन पर, html5lib मेरे लिए बॉक्स से बाहर काम नहीं करता था। मुझे अभी भी एक करना था pip install html5lib, जिसके बाद सब कुछ ठीक हो गया।
पेट्रोकोल्स

मेरे लिए काम नहीं किया: bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?अगर मैं इसे बदलने के लिए html.parserकाम करता है
8bitjunkie

41

मैं अजगर HTML पार्सर में बनाया पसंद करते हैं, कोई निर्भरता स्थापित नहीं

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


यह @Ernst पर काम करता है जबकि पिछला काम नहीं करता है। धन्यवाद!
adrCoder

14

मैं पायथन 3.6 का उपयोग कर रहा हूं और मुझे इस पोस्ट में एक ही मूल त्रुटि थी। कमांड चलाने के बाद:

python3 -m pip install lxml

इसने मेरी समस्या हल कर दी


डॉकर में यह आवश्यक भी हैapt install python-lxml
वाल्टर

14

यह सुनिश्चित करने के लिए इन तीन कमांड को चलाएं कि आपके पास सभी प्रासंगिक पैकेज स्थापित हैं:

pip install bs4
pip install html5lib
pip install lxml

फिर जरूरत पड़ने पर अपने पायथन आईडीई को पुनः आरंभ करें।

इस मुद्दे से संबंधित किसी भी चीज का ध्यान रखना चाहिए।


1
यह वास्तविक समाधान है।
जॉन स्टड

8

Lxml उपयोग html.parser के बजाय, आप इस कोड का उपयोग कर सकते हैं:

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

2
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?
एलेक्स

4

हालाँकि सुंदरसॉफ़्ट डिफ़ॉल्ट रूप से 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 

बाहरी पार्सर में सी और पायथन निर्भरता होती है जिसके कुछ लाभ और नुकसान हो सकते हैं।


3

मैंने उसी मुद्दे का सामना किया। मुझे लगता है कि इसका कारण यह है कि मेरे पास छह-सिरों वाला एक पुराना पैकेज था।

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

अपने छह पैकेज को अपग्रेड करने से समस्या हल हो जाएगी:

sudo pip install six=1.10.0

sudo pip install six==1.10.0
16

2

अजगर वातावरण में LXML पार्सर स्थापित करें।

pip install lxml

आपकी समस्या का समाधान होगा। आप बिल्ट-इन अजगर पैकेज का उपयोग उसी के लिए भी कर सकते हैं:

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

नोट: "HTMLParser" मॉड्यूल का नाम बदलकर Python3 में "html.parser" कर दिया गया है


0

कुछ संदर्भों में, पहले के बजाय दूसरे का उपयोग करें:

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

आपको अपने उत्तर में थोड़ा और विस्तार प्रदान करना चाहिए
माइकल

0

त्रुटि उस पार्सर के कारण आ रही है जिसका आप उपयोग कर रहे हैं। सामान्य तौर पर, यदि आपके पास HTML फ़ाइल / कोड है, तो आपको उपयोग करने की आवश्यकता है html5lib(प्रलेखन यहां पाया जा सकता है ) और यदि आपके पास XML फ़ाइल / डेटा है, तो आपको उपयोग करने की आवश्यकता है lxml(प्रलेखन यहां पाया जा सकता है )। आप lxmlHTML फ़ाइल / कोड के लिए भी उपयोग कर सकते हैं लेकिन कभी-कभी यह ऊपर की तरह एक त्रुटि देता है। इसलिए, डेटा / फ़ाइल के प्रकार के आधार पर पैकेज को बुद्धिमानी से चुनना बेहतर होगा। आप यह भी उपयोग कर सकते हैं html_parserजो अंतर्निहित मॉड्यूल है। लेकिन, यह भी कभी-कभी काम नहीं करता है।

किस पैकेज का उपयोग करना है, इसके बारे में अधिक जानकारी के लिए आप यहां विवरण देख सकते हैं


0

खाली पैरामीटर का परिणाम सबसे अच्छा उपलब्ध होने की चेतावनी के रूप में होगा।
सूप = ब्यूटीसौप (html)

--------------- / UserWarning: कोई भी पार्सर स्पष्ट रूप से निर्दिष्ट नहीं किया गया था, इसलिए मैं इस प्रणाली ("html5lib") के लिए सर्वोत्तम उपलब्ध HTML पार्सर का उपयोग कर रहा हूं। यह आमतौर पर कोई समस्या नहीं है, लेकिन यदि आप इस कोड को किसी अन्य सिस्टम पर, या किसी भिन्न वर्चुअल वातावरण में चलाते हैं, तो यह भिन्न पार्सर का उपयोग कर सकता है और भिन्न व्यवहार कर सकता है ।--------------- ------- /

पायथन - विचलन पायथन 3.7.7

PyCharm 19.3.4 CE

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.