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

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

新規登録して質問してみよう
ただいま回答率
85.51%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

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

Q&A

解決済

2回答

3357閲覧

UbuntuOSにbeautifulsoupをインストールする際に表示されるエラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

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

0グッド

0クリップ

投稿2018/01/01 13:40

###前提・実現したいこと
PythonスクレイピングのコードをUbuntuOSで動かそうとしています。
参考サイトの「train3.py」を実行しようとしたところ、

File "train3.py", line 3, in <module> from bs4 import BeautifulSoup ImportError: No module named bs4

とエラーが出たため、

$ pip install beautifulsoup4

インストールしようとした際にエラーが出てしまい、困っています。

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

Exception: Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main status = self.run(options, args) File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 342, in run prefix=options.prefix_path, File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 784, in install **kwargs File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 851, in install self.move_wheel_files(self.source_dir, root=root, prefix=prefix) File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 1064, in move_wheel_files isolated=self.isolated, File "/usr/local/lib/python2.7/dist-packages/pip/wheel.py", line 345, in move_wheel_files clobber(source, lib_dir, True) File "/usr/local/lib/python2.7/dist-packages/pip/wheel.py", line 316, in clobber ensure_dir(destdir) File "/usr/local/lib/python2.7/dist-packages/pip/utils/__init__.py", line 83, in ensure_dir os.makedirs(path) File "/usr/lib/python2.7/os.py", line 157, in makedirs mkdir(name, mode) OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/beautifulsoup4-4.6.0.dist-info'

###該当のソースコード

Python

1#train3.py 2# -*- coding: utf-8 -*- 3 4from bs4 import BeautifulSoup 5import urllib.request as req 6import sqlite3 7import re 8 9url = "http://www.keishicho.metro.tokyo.jp/kurashi/higai/kodomo/fushin/20_fushin.html" 10dbname = 'database.db' 11conn = sqlite3.connect(dbname) 12c = conn.cursor() 13table_name = 'test' 14 15# train1の部分 16def get_html(): 17 # urlopen()でデータを取得 18 res = req.urlopen(url) 19 20 # BeautifulSoup()で解析 21 soup = BeautifulSoup(res, 'html.parser') 22 23 # 任意のデータを抽出 24 main = soup.find("div", id="main").find("div", class_="main_inner").find("div", class_="t-box2") 25 news_list = main.find("table").find_all("tr") 26 27 res = [] 28 for news in news_list: 29 res += get_res(news) 30 31 return res 32 33# 記事から情報を抜き出すところ 34def get_res(news): 35 place = news.find('th').string 36 main = news.find('td').find('p').text 37 main_list = re.match('(.*警察署)([0-9]{1,2})月([0-9]{1,2})日((.)曜)、(.*)ころ、(.*)不審者の特徴:(.*)', main).groups() 38 police = main_list[0] 39 date = main_list[1] + main_list[2] + main_list[3] 40 time = main_list[4] 41 body = main_list[5] 42 feature = main_list[6] 43 44 return [(place, police, date, time, body, feature)] 45 46 47def drop_table(tname): 48 # executeメソッドでSQL文を実行する 49 create_table = '''drop table if EXISTS {} '''.format(tname) 50 c.execute(create_table) 51 52# train2の部分 53def create_table(tname): 54 # executeメソッドでSQL文を実行する(型はひとまずcharで入れてます...) 55 create_table = ''' 56create table if NOT EXISTS {} ( 57 place varchar(64), 58 police varchar(32), 59 date varchar(64), 60 time varchar(64), 61 body varchar(64), 62 feature varchar(64))'''.format(tname) 63 c.execute(create_table) 64 65def insert_data(tname, data): 66 # 一度に複数のSQL文を実行したいときは,タプルのリストを作成した上で 67 # executemanyメソッドを実行する 68 insert_sql = 'insert into {0} (place, police, date, time, body, feature) values (?,?,?,?,?,?)'.format(tname) 69 c.executemany(insert_sql, data) 70 conn.commit() 71 72def select_all(tname): 73 select_sql = 'select * from {0}'.format(table_name) 74 res = "" 75 for row in c.execute(select_sql): 76 res += str(row) 77 return res 78 79 80if __name__ == '__main__': 81 drop_table(table_name) 82 create_table(table_name) 83 test = get_html() 84 insert_data(table_name, test) 85 print(select_all(table_name)) 86 87 88 conn.close()

###補足情報(言語/FW/ツール等のバージョンなど)
Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-57-generic x86_64)
Python 2.7.12

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

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

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

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

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

guest

回答2

0

venvやvirtualenvで仮想環境を作れば、その中でpip install beautifulsoup4が使えると思います。
グローバル環境を汚さずに済み、いらなくなれば仮想環境を消せばよいので便利です。

投稿2018/01/01 13:55

Udomomo

総合スコア1524

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

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

退会済みユーザー

退会済みユーザー

2018/01/02 00:09

ご回答いただきましてありがとうございました。
guest

0

ベストアンサー

こんにちは。
解決するか分かりませんが、

pip install beautifulsoup4

ではなく、

sudo pip install beautifulsoup4

で、beautifulsoup4 をインストールされてみるとうまくいくかもしれません。

参考:How to install EbaySDK on python on Mac

May be you don't have write access in that directory. – MD. Khairul Basar Sep 30 '17 at 15:51

have you tried sudo? – georgexsh Sep 30 '17 at 18:23

投稿2018/01/01 13:51

jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2018/01/02 00:09

ご回答いただきましてありがとうございました。解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問