...
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?
Output di atas pada Terminal saya. Saya di Mac OS 10.7.x. Saya memiliki Python 2.7.1, dan mengikuti tutorial ini untuk mendapatkan Beautiful Soup dan lxml, yang keduanya berhasil diinstal dan bekerja dengan file tes terpisah yang terletak di sini . Dalam skrip Python yang menyebabkan kesalahan ini, saya telah menyertakan baris ini:
from pageCrawler import comparePages
Dan dalam file pageCrawler saya telah menyertakan dua baris berikut:
from bs4 import BeautifulSoup
from urllib2 import urlopen
Setiap bantuan dalam mencari tahu apa masalahnya dan bagaimana cara memecahkannya akan sangat dihargai.
python
python-2.7
beautifulsoup
lxml
pengguna3773048
sumber
sumber
html
url atau isinya html?Jawaban:
Saya curiga ini terkait dengan parser yang akan digunakan BS untuk membaca HTML. Mereka mendokumentasikan ada di sini , tetapi jika Anda seperti saya (di OSX), Anda mungkin akan terjebak dengan sesuatu yang membutuhkan sedikit kerja:
Anda akan melihat bahwa pada halaman dokumentasi BS4 di atas, mereka menunjukkan bahwa secara default BS4 akan menggunakan parser HTML bawaan Python. Dengan asumsi Anda menggunakan OSX, versi Python yang dibundel Apple adalah 2.7.2 yang tidak lunak untuk pemformatan karakter. Saya mengalami masalah yang sama, jadi saya memutakhirkan versi Python saya untuk mengatasinya. Melakukan ini dalam virtualenv akan meminimalkan gangguan pada proyek lain.
Jika melakukan itu terdengar seperti rasa sakit, Anda dapat beralih ke pengurai LXML:
Dan kemudian coba:
Tergantung pada skenario Anda, itu mungkin cukup baik. Saya menemukan ini cukup menjengkelkan untuk menjamin peningkatan versi Python saya. Dengan menggunakan virtualenv, Anda dapat memigrasi paket Anda dengan cukup mudah.
sumber
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
danlxml
sebelumBeautifulSoup
mem-parsing konten halaman web saya.Untuk dasar dari kotak python dengan bs4 diinstal maka Anda dapat memproses xml Anda dengan
Namun jika Anda ingin menggunakan formatter = 'xml' maka Anda perlu melakukannya
sumber
pip install html5lib
, setelah semuanya bekerja dengan baik.bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?
Jika saya mengubahnyahtml.parser
berfungsiSaya lebih suka dibangun di python html parser, tidak menginstal tidak ada dependensi
soup = BeautifulSoup(s, "html.parser")
sumber
Saya menggunakan Python 3.6 dan saya memiliki kesalahan asli yang sama dalam posting ini. Setelah saya menjalankan perintah:
itu menyelesaikan masalah saya
sumber
apt install python-lxml
Jalankan ketiga perintah ini untuk memastikan Anda telah menginstal semua paket yang relevan:
Kemudian restart IDE Python Anda, jika perlu.
Itu harus mengurus apa pun yang berkaitan dengan masalah ini.
sumber
Alih-alih menggunakan lxml gunakan html.parser, Anda dapat menggunakan kode ini:
sumber
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?
Meskipun BeautifulSoup mendukung parser HTML secara default. Jika Anda ingin menggunakan parser Python pihak ketiga lainnya, Anda harus menginstal parser eksternal seperti (lxml).
Tetapi jika Anda tidak menentukan parser sebagai parameter, Anda akan mendapatkan peringatan bahwa tidak ada parser yang ditentukan.
Untuk menggunakan parser eksternal lainnya, Anda harus menginstalnya dan kemudian perlu menentukannya. Suka
Parser eksternal memiliki ketergantungan c dan python yang mungkin memiliki beberapa kelebihan dan kekurangan.
sumber
Saya mengalami masalah yang sama. Saya menemukan alasannya adalah bahwa saya memiliki paket python enam yang agak ketinggalan jaman.
Memutakhirkan enam paket Anda akan menyelesaikan masalah:
sumber
sudo pip install six==1.10.0
Instal parser LXML di lingkungan python.
Masalah Anda akan teratasi. Anda juga dapat menggunakan paket python bawaan untuk sama seperti:
Catatan: Modul "HTMLParser" telah diubah namanya menjadi "html.parser" di Python3
sumber
Dalam beberapa referensi, gunakan yang kedua alih-alih yang pertama:
sumber
Kesalahan terjadi karena parser yang Anda gunakan. Secara umum, jika Anda memiliki file / kode HTML maka Anda perlu menggunakan
html5lib
(dokumentasi dapat ditemukan di sini ) & jika Anda memiliki file XML / data maka Anda perlu menggunakanlxml
(dokumentasi dapat ditemukan di sini ). Anda dapat menggunakanlxml
file / kode HTML juga tetapi kadang-kadang memberikan kesalahan seperti di atas. Jadi, lebih baik memilih paket secara bijak berdasarkan jenis data / file. Anda juga bisa menggunakanhtml_parser
modul bawaan. Tapi, ini juga kadang tidak berhasil.Untuk detail lebih lanjut mengenai kapan menggunakan paket mana Anda bisa melihat detailnya di sini
sumber
Parameter kosong akan menghasilkan peringatan untuk yang terbaik tersedia.
sup = BeautifulSoup (html)
--------------- / UserWarning: Tidak ada parser yang ditentukan secara eksplisit, jadi saya menggunakan parser HTML terbaik yang tersedia untuk sistem ini ("html5lib"). Ini biasanya bukan masalah, tetapi jika Anda menjalankan kode ini di sistem lain, atau di lingkungan virtual yang berbeda, ini mungkin menggunakan parser yang berbeda dan berperilaku berbeda .--------------- ------- /
python --version Python 3.7.7
PyCharm 19.3.4 CE
sumber