質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

1回答

6202閲覧

html5libをインストールしているのにCouldn't find a tree builder with the features you requested: html5libが出る

bunks

総合スコア30

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

0クリップ

投稿2018/10/03 00:42

編集2022/01/12 10:55

VPS上でDjangoとMeCabを用いたスクレイピングプログラムを作成しています。
ローカル環境では問題なく動くのですが,VPS上ではエラーが出ます。

bash

1$ pip3 freeze | grep -e request -e lxml -e beautiful -e html5lib 2beautifulsoup4==4.6.3 3html5lib==1.0.1 4lxml==3.7.3 5request==1.0.2 6requests==2.19.1

のように,必要なパッケージのインストールが確認されているのに,
Couldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?
というエラーが出ます。
(lxml,html.parserの場合も同様)

python

1models.py 2 3 html = requests.get(searchUrl) 4 bs = BeautifulSoup(html.text, 'html5lib') ... 5 for el in bs.select("h3.r a"): 6 title = el.get_text() 7 url = dict(parse_qsl(urlparse(el.get("href")).query))["q"]

エラーはbs = BeautifulSoup(html.text, 'html5lib')で生じます。
また,直前にhtml.encoding('utf-8')を書き加えた場合にはhtml.encoding('utf-8')でエラーとなります。

どのようにすればエラーが解決できるでしょうか?

なお,stackoverflowやteratailでの同様の質問は参照済みです。

環境はLocal:macOS High Sierra,VPS:CentOS7
いただいた質問に関する出力結果は,
https://docs.google.com/document/d/1DzycCIAjIUONikpp109OzexD4qOR0oyY4zKc4WJju6U/edit?usp=sharing
に記載してあります。(長すぎたため質問に収まらず)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takey

2018/10/03 01:01

掲載されているプログラムが、html5libを使っていないようですが、何行目でエラーが出ているのですか?実際のエラーメッセージを貼り付けてみてください。
bunks

2018/10/03 01:32

lxml,html5lib,html.parserなど色々試していた時のもので,プログラムの箇所自体は掲載しているもので間違いありません。エラーメッセージも掲載いたしました。お手数かと思いますが,よろしくお願いします。
takey

2018/10/03 02:21

最後に掲載している出力はローカル環境の出力ですか?VPS上で実行するとCouldn't find a tree builder with the features you requested: html5lib. Do you need to install a parser library?エラーが発生するという意味ですか?
bunks

2018/10/03 02:23

掲載しているものは全てVPS上のコードと出力です。ローカルではエラーが出ません。
tiitoi

2018/10/03 03:25

import html5lib や import lxml とすると、どうなりますか?
bunks

2018/10/03 04:33 編集

pip3 install すると,already satisfied と出ます…
tiitoi

2018/10/03 04:12 編集

pip ではなく、Python コードで import html5lib や import lxml をして、それらのライブラリが使えるのかどうかを確認してみてください。
bunks

2018/10/03 04:47

python3 >>> import html5lib >>> import lxml 問題なくimportされてそうです。
guest

回答1

0

以下の実行結果を見せてもらっても良いですか?

python

1import bs4 2import html5lib 3import lxml 4print("bs4 ==> " + "".join(bs4.__path__)) 5print("html5lib ==> " + "".join(html5lib.__path__)) 6print("lxml ==> " + "".join(lxml.__path__))

【追記】
以下も見せてください

python

1import bs4 2print(bs4.builder._html5lib)

投稿2018/10/03 04:51

編集2018/10/03 05:13
takey

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bunks

2018/10/03 05:06

こちらでよろしいのでしょうか…? 知識に乏しく大変申し訳ないです。 >>> import bs4 >>> import html5lib >>> import lxml >>> print("bs4 ==> " + bs4.__path__) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not list >>> print("html5lib ==> " + html5lib.__path__) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not list >>> print("lxml ==> " + lxml.__path__) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not list >>> import bs4 >>> print("_html5lib ==> " + bs4.builder._html5lib) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not module
takey

2018/10/03 05:14

ごめんなさい。私のプログラムミスです。 編集しましたので、もう一度結果を見せてもらえますか?
bunks

2018/10/03 05:26

編集ありがとうございます。 以下のようになりました。 >>> import bs4 >>> import html5lib >>> import lxml >>> print("bs4 ==> " + "".join(bs4.__path__)) bs4 ==> /usr/local/lib64/python3.6/site-packages/bs4 >>> print("html5lib ==> " + "".join(html5lib.__path__)) html5lib ==> /usr/local/lib/python3.6/site-packages/html5lib >>> print("lxml ==> " + "".join(lxml.__path__)) lxml ==> /usr/local/lib64/python3.6/site-packages/lxml >>> import bs4 >>> print(bs4.builder._html5lib) <module 'bs4.builder._html5lib' from '/usr/local/lib64/python3.6/site-packages/bs4/builder/_html5lib.py'>
takey

2018/10/03 05:38

うーん、html5libだけなぜか**lib**ディレクトリにありますね。他はlib64ディレクトリなのに。 _html5libモジュールがhtml5libを参照できているか確認したいので、以下の実行結果を見せてもらえますか。 >>> import bs4 >>> import pprint >>> a = bs4.builder._html5lib.__dict__ >>> pprint.pprint(a) 実行結果は長いので、質問に追記してください。
takey

2018/10/03 05:55

あと、ローカル環境のOSと、VPS環境のOSも教えてください。
bunks

2018/10/03 06:16

実行結果および環境を追記しました。 実行結果についてはグーグルドライブですが,ご容赦ください。
takey

2018/10/03 06:58

'html5lib': <module 'html5lib' from '/usr/local/lib/python3.6/site-packages/html5lib/__init__.py'> 'treebuilder_base': <module 'html5lib.treebuilders.base' from '/usr/local/lib/python3.6/site-packages/html5lib/treebuilders/base.py'> とあるので、きちんと参照できていると思います…。 html5libだけlibディレクトリにあるというのが怪しいですが、正直よくわかりません。 あとは、html5libを一度アンインストールして、再インストールするくらいしか思いつきません。 再インストールは試されましたか?
bunks

2018/10/03 07:15

再インストールを行なっても格納されるディレクトリの場所が同じで,うまく起動もしませんでした。 一度,VPS自体を最初から設定して,あらためてこちらにコメントします。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問