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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Python 3.x

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

Q&A

解決済

2回答

6957閲覧

ImportError: No module named 'bs4'の解決方法

ponpon0987

総合スコア17

Python 3.x

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

1グッド

1クリップ

投稿2018/11/09 09:03

編集2018/11/09 10:14

前提・実現したいこと

python初心者です。
現在、内部リンクの可視化を行なっている際にエラーが発生し解決できないので
質問させていただきます。

この発生している問題の解決方法について教えていただきたいです。
よろしくお願い致します。

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

File "link_network.py", line 2, in <module> from bs4 import BeautifulSoup ImportError: No module named 'bs4'

該当のソースコード

# coding:utf-8 from bs4 import BeautifulSoup import urllib from urllib import request import time import csv import os import numpy as np import time from argparse import ArgumentParser import networkx as nx import matplotlib.pyplot as plt def extract_url(root_url): page = 1 is_articles = True urls = [] entry_url = root_url + "/entry/" while is_articles: html = request.urlopen(root_url+"/archive?page={}".format(page)) soup = BeautifulSoup(html, "html.parser") articles = soup.find_all("a",class_="entry-title-link") for article in articles: urls.append(article.get("href")) if len(articles) == 0: # articleがなくなったら終了 is_articles = False page += 1 return urls def make_network(root_url, urls): entry_url = root_url + "/entry/" G = nx.Graph() for url in urls: article_name= url.replace(entry_url,"").replace("/","-") G.add_node(article_name) for i,url in enumerate(urls): print(i+1,"/",len(urls)) try: html = request.urlopen(url) except urllib.error.HTTPError as e: print(e.reason) except urllib.error.URLError as e: print(e.reason) soup = BeautifulSoup(html, "html.parser") entry = soup.select(".entry-content")[0] links = entry.find_all("a") for link in links: l = link.get("href") if l in urls: linking_article_name = url.replace(entry_url,"").replace("/","-") linked_article_name = l.replace(entry_url,"").replace("/","-") print("被リンク!{} -> {}".format(linking_article_name, linked_article_name)) j = urls.index(l) G.add_edge(linking_article_name, linked_article_name) else: continue return G def visualize(G, savename, savegml): pos = nx.spring_layout(G) # グラフ形式を選択。ここではスプリングモデルでやってみる nx.draw(G, pos, with_labels=True,alpha=0.3,font_size=0.0,node_size=10) # グラフ描画。 オプションでノードのラベル付きにしている plt.savefig(savename+".png") plt.show() if savegml: nx.write_gml(G,savename+".gml") if __name__ == '__main__': parser = ArgumentParser() parser.add_argument("-u", "--url", type=str, required=True,help="input your url") parser.add_argument("-o", "--savename", type=str, default="network", help="output name") parser.add_argument('-g', "--savegml", action="store_true", default=False) args = parser.parse_args() urls = extract_url(args.url) G = make_network(args.url, urls) visualize(G, args.savename, args.savegml)

試したこと

Beautifulsoup4がインストールできていることが確認済みです。

また、python -V
python3.5.4になっております。

pip list
Package Version


beautifulsoup4 4.6.3
bs4 0.0.1
cycler 0.10.0
decorator 4.3.0
kiwisolver 1.0.1
matplotlib 3.0.1
networkx 2.2
numpy 1.15.4
pip 18.1
pyparsing 2.3.0
python-dateutil 2.7.5
setuptools 39.0.1
six 1.11.0

Nekoneko3594👍を押しています

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

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

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

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

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

wakame

2018/11/09 10:04

pip listの結果を質問文に追記してください
ponpon0987

2018/11/09 10:15

このような結果が帰ってきました。
wakame

2018/11/09 10:16

pip uninstall bs4して、link_network.pyを再度実行してみてください
can110

2018/11/09 10:18

OSなどの環境、コード実行手順など詳細を追記すると回答得られやすくなります。
ponpon0987

2018/11/09 10:22

アンインストール後に、同じ結果が返ってきました。やはり、ImportError: No module named 'bs4'になります。
guest

回答2

0

ベストアンサー

python -Vが3.5.4で
pip -Vが
pip 18.1 from /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pip (python 3.7)

であれば、一致していませんねぇ。複数のpythonをインストールしていませんか?

とりあえずの対策手順

  • which pythonでpythonコマンドの方がどこにインストールされているか確認する
  • python 3.7とpython3.5のどちらを使いたいか選んでください
  • python3.5を使いたい場合:現状pythonコマンドがpython3.5.4なので、python -m pip ~でpython3.5.4のpipが操作できると思います
  • python3.7を使いたい場合:たぶんpython3.7コマンドでpython3.7が立ち上がると思います。shellのエイリアスや環境変数をいじり、pythonコマンドでpython3.7が立ち上がるようにします

macでpythonを使う場合、システムに管理を委ねると色々と面倒くさいので、python標準の仮想環境ツールvenvでホームディレクトリ以下などに仮想環境を作っておくことをおすすめします。あとはsource <venv>/bin/activateにshell側で適当なエイリアスを貼って、コマンド一つで仮想環境が立ち上がるようにしておいてその環境を常用すればよいわけで。

28.3. venv — 仮想環境の作成 — Python 3.6.5 ドキュメント

投稿2018/11/10 00:04

編集2018/11/10 00:06
hayataka2049

総合スコア30935

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

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

ponpon0987

2018/11/12 02:05

ありがとうございます!できました!!
guest

0

Python/Bash

1pip install bs4

投稿2018/11/09 09:55

yamato_user

総合スコア2321

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

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

ponpon0987

2018/11/09 09:59

ありがとうございます。 そちらもインストールできております。
yamato_user

2018/11/09 10:15

pip -Vは3系ですか? virtualenvなどの仮想環境は使っていませんか?
ponpon0987

2018/11/09 10:24

pip-V pip 18.1 from /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pip (python 3.7)です。 仮想は使っておらず、MacOsのターミナルとsublime textを使ってます。
yamato_user

2018/11/09 10:31

import bs4 単体では使えますか? 使えないなら下記を試してみてください pip uninstall bs4 pip uninstall beautifulsoup4 してから再度 pip install beautifulsoup4 を実行。そして、 import bs4 か from bs4 import BeautifulSoup を実行
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問