🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3457閲覧

Pythonスクレイピング ModuleNotFoundError: No module named 'bs4'のエラー表示

hiro.a

総合スコア28

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/07 15:46

前提・実現したいこと

Pythonでスクレピングの学習をしています
参考書に書かれている通り、スクレイピングをしたいです

いろいろ調べましたが、bs4のインストールもできています

発生している問題・エラーメッセージ

bs4モジュールがないと、エラーが表示されます

該当のソースコード

Pyhton

1 2#全体のコードです 3import urllib.request 4from bs4 import BeautifulSoup 5 6class Scraper: 7 #スクレイピング対象となるWebサイトのURLを受け取る。引数を受け取る 8 def __init__(self, site): 9 self.site = site 10 11 #スクレイピングしたいタイミングで、このメソッドを呼び出す 12 def scrape(self): 13 #urlopen関数はWebサイトへのリクエストを行う。Responseオブジェクトが返され、この中でHTMLと追加情報が格納されている 14 r = urllib.request.urlopen(self.site) 15 html = r.read() 16 parser = "html.parser" 17 #BeautifulSoupオブジェクトにHTML変数とHTMLをパースして欲しいことを伝える 18 sp = BeautifulSoup(html, parser) 19 #find_allメソッドはイテラブルなオブジェクト・・・条件に合うHTML要素を取得する 20 #<a></a>タグを全て集めて返す様に伝える 21 for tag in sp.find_all("a"): 22 #ループが回る度に変数tagに新しいTagのオブジェクトが代入される 23 #ここで必要なのはURLが代入されているhrefインスタンス変数 24 url = tag.get("href") 25 if url is None: 26 continue 27 if "html" in url: 28 print("\n" + url) 29 30news = "https://news.google.com/" 31Scraper(news).scrape() 32 33#結果 34ModuleNotFoundError: No module named 'bs4'

試したこと

いろいろ調べながら確認しましたが、インストールはされている様です
pip list
pip install beautifulsoup4
pip freeze

などをして確認しました
以下に表示されたのを記載します

補足情報(FW/ツールのバージョンなど)

bs4 0.0.1
beautifulsoup4==4.6.0
Mac OSです

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

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

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

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

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

otn

2021/01/07 15:54

pythonを複数インストールとかしていませんか?
guest

回答2

0

自己解決

原因はわかりませんでした
ですが、こちらはVsCodeで書いており、PyCharmにしたら問題なくできました

投稿2021/01/13 11:52

hiro.a

総合スコア28

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

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

0

モジュールをimportできないという質問が多いのですが、複数のpythonがインストールされていて別のpythonにインストールされたモジュールをimportしていることが良くあります。

それをチェックするためのプログラムを作ったので、これで確認してみてください。

python

1import sys 2import os 3 4if os.name == 'nt': 5 s = '\' 6else: 7 s = '/' 8 9def check_module(m): 10 for path in sys.path: 11 for candidate in [s.join([path, m+'.py']), s.join([path, m, '__init__.py'])]: 12 if os.path.exists(candidate): 13 print(candidate) 14 return 15 print(f'Module: {m} is not exist in {sys.path}') 16 return 17 18if __name__ == '__main__': 19 if len(sys.argv) >1: 20 check_module(sys.argv[1]) 21 else: 22 print(f'usage: python {sys.argv[0]} module')

上のソースをcheck_module.pyと言う名前で作成してください。

Linuxでの実行例

shell

1$ python check_module.py bs4 2/home/ppaul/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages/bs4/__init__.py 3$ python check_module.py bs5 4Module: bs5 is not exist in ['/home/ppaul/python_sample/check_module', '/home/ppaul/.pyenv/versions/anaconda3-2020.07/lib/python38.zip', '/home/ppaul/.pyenv/versions/anaconda3-2020.07/lib/python3.8', '/home/ppaul/.pyenv/versions/anaconda3-2020.07/lib/python3.8/lib-dynload', '/home/ppaul/.pyenv/versions/anaconda3-2020.07/lib/python3.8/site-packages']

Windowsでの実行例

python

1> python check_module.py bs4 2C:\Users\ppaul\anaconda3\lib\site-packages\bs4\__init__.py 3> python check_module.py bs5 4Module: bs5 is not exist in ['C:\Users\ppaul\python_sample\teratail\check_module', 'C:\Users\ppaul\anaconda3\python38.zip', 'C:\Users\ppaul\anaconda3\DLLs', 'C:\Users\ppaul\anaconda3\lib', 'C:\Users\ppaul\anaconda3', 'C:\Users\ppaul\anaconda3\lib\site-packages', 'C:\Users\ppaul\anaconda3\lib\site-packages\win32', 'C:\Users\ppaul\anaconda3\lib\site-packages\win32\lib', 'C:\Users\ppaul\anaconda3\lib\site-packages\Pythonwin']

これでnot existが出たら、そのコンソールからインストールしてください。

Jupyterとかを使っているなら、確か

python

1import sys 2import os 3 4if os.name == 'nt': 5 s = '\' 6else: 7 s = '/' 8 9def check_module(m): 10 for path in sys.path: 11 for candidate in [s.join([path, m+'.py']), s.join([path, m, '__init__.py'])]: 12 if os.path.exists(candidate): 13 print(candidate) 14 return 15 print(f'Module: {m} is not exist in {sys.path}') 16 return 17 18check_module('bs4')

と打ち込めばチェックできるはずです。

投稿2021/01/07 17:00

ppaul

総合スコア24670

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

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

hiro.a

2021/01/08 05:57

check_module.pyで作成して python check_module.py bs4を実行したら、 can't open file 'check_module.py': [Errno 2] No such file or directory check_module.pyファイルはありませんと出るのですが、これの理由はわかりますか?
ppaul

2021/01/08 06:04

import os os.getcwd() を実行して、表示されるディレクトリにcheck_module.pyがあることを確認して下さい。
hiro.a

2021/01/08 07:37

実行例の通り、python check_module.py bs5で Module: bs5 is not exist in コンソールから新たにインストールを実行しました すでにインストールされている様ですが、モジュールが無い様です インポートされているパスが違う可能性がある?
ppaul

2021/01/08 08:02

Module: bs5 is not exist in ・・・ は存在しません。インストールする必要もありません。 見つからないときには、こういうメッセージが出る、ということを示すための実行例ですので無視して下さい。 bs4は存在しましたか?
hiro.a

2021/01/08 08:14

$ python check_module.py bs4は /Users/XXX/.pyenv/versions/3.8.2/lib/python3.8/site-packages/bs4/__init__.pyされました
ppaul

2021/01/08 09:14

不思議ですね。 sys.pathのどれかのディレクトリの下にbs4があり、その中に__inint__.pyがあるのですから、bs4はimportできるはずです。 では、check_module.pyの最初の行に from bs4 import BeautifulSoup を入れて、再度 $ python check_module.py bs4 をやってみてください。これでエラーが出なければ、importできるということが確認できます。
hiro.a

2021/01/08 09:20

/Users/hiromu/.pyenv/versions/3.8.2/lib/python3.8/site-packages/bs4/__init__.py できている様です
ppaul

2021/01/08 11:24

では、hiro.aさんの作ったソースコードをこのディレクトリに置いて、同じように動かせば、bs4モジュールがないというエラーは出なくなりますね。
hiro.a

2021/01/09 01:25

ですよね。やってみたのですが変わらずです。。。
ppaul

2021/01/09 02:58

確認ですが、hiro.aさんの作ったソースコードの1行目は #!/usr/bin/python のような行ではないですね。もしそうならその行を消して下さい。 そうでなければ、check_module.pyの一番最初に以下の文を入れてください。 import sys print(sys.version) このあと、 $ python check_module.py を実行すると、 '3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)]' のようなものが表示されます。 同じようにhiro.aさんの作ったソースコードの最初のところにも import sys print(sys.version) を入れて $ python hiro_a.py を実行して先ほどの結果と見比べてください。 同じでないとすると非常に不思議です。
hiro.a

2021/01/09 04:23

同じ 3.8.2 (default, Jun 11 2020, 12:08:21) [Clang 11.0.3 (clang-1103.0.32.29)]が表示しました!
ppaul

2021/01/09 07:16

同じだとすると、それも不思議ですね。 hiro.aさんのソースコード全体を、check_module.pyの一番下に貼り付けて動かしてみますか。それで動いたらまた不思議が増えてしましますが、やってみてください。
hiro.a

2021/01/09 10:48

ありがとうございます。試してみます ちなみに今Pycharm(前までVscode)で実行しましたら、ModuleNotFoundError: No module named 'bs4'は表示されず 実行結果無しが出ました。 IDE変えたら変わるものですかね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問