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

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

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

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

Q&A

解決済

4回答

2636閲覧

'module' object has no attribute 'request'が出る

kyonmn

総合スコア15

Python

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

0グッド

0クリップ

投稿2019/05/07 03:14

編集2019/05/07 03:37

JSONでWEBスクレイピングをしようとしているのですが、やり方がわかりません。

python3

1import json 2import urllib 3 4url = 'http://xxx.com' 5headers = { 6 "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0", 7 } 8request = urllib.request.Request(url=url, headers=headers) 9response = urllib.request.urlopen(request) 10root = json.loads(response.read()) 11print('caution=' + root['copyright'])

というコードを書いたのですが、

request = urllib.request.Request(url=url, headers=headers)

AttributeError: 'module' object has no attribute 'request'

と出てしまいます。requestパッケージも入れましたが反応しません。どのように解決できますでしょうか?

追記

また、このようなコードでも実行致しました。

python3

1import json 2import urllib.request 3 4url = 'http://xxx.com' 5headers = { 6 "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0", 7 } 8request = urllib.request.Request(url=url, headers=headers) 9response = urllib.request.urlopen(request) 10root = json.loads(response.read()) 11print('caution=' + root['copyright'])

そうしますと、以下のような結果になりました。

import urllib.request

ImportError: No module named request

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

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

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

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

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

guest

回答4

0

ベストアンサー

python

1import urllib 2print(urllib.__file__) 3 4import sys 5print(sys.prefix)

を確認してください。

普通なら

plain

1(Pythonが入っているところ)/lib/python3.6/urllib/__init__.py 2(Pythonが入っているところ)

という結果になるはずですが、urllibの実体が妙なところを指していたりしないでしょうか。

投稿2019/05/07 04:17

quickquip

総合スコア11038

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

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

kyonmn

2019/05/07 04:26

同一でした。
quickquip

2019/05/07 04:38

であれば本当に (略)/lib/python3.6/urllib/request.py がなくなっているのでしょう。Pythonの再インストールが必要だと思います。(一応。__init__.py 以外に error.py parse.py request.py response.py robotparser.py があるはずです)
quickquip

2019/05/07 06:16

同一なのはいいとして、Python3.6じゃかったりはしないのでしょうか?
kyonmn

2019/05/07 07:13

3.7です
quickquip

2019/05/07 07:32

途中でバージョン変わりましたか。やること、確認することは変わらないですよ。
kyonmn

2019/05/07 08:15

わかりました
guest

0

print「文」から考えると、python2で実行したいのでしょうか。

であれば、

python

1import json 2import urllib2 3 4url = 'http://xxx.com' 5headers = { 6 "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0", 7 } 8request = urllib2.Request(url=url, headers=headers) 9response = urllib2.urlopen(request) 10root = json.loads(response.read()) 11print 'caution=' + root['copyright']

ですかね。

投稿2019/05/07 03:33

hayataka2049

総合スコア30933

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

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

kyonmn

2019/05/07 03:36

現在利用しているのはpython3ですので、その点printの利用方法は間違っているとわかりました、ありがとうございます。
hayataka2049

2019/05/07 03:40 編集

可能性として考えられるのは、 ・うっかりpython2で実行している(import sys;print(sys.version)という一行を先頭に足して実行してみてください。質問文のコードを実行したのと「同じ方法で」実行する必要があります) ・urllib.pyのようなファイルか、urllibという名前のフォルダをうっかり作っている のどちらかだと思います。確認してみてください。
kyonmn

2019/05/07 03:44

ターミナルにてpythonのバージョン確認を行いました。 $ python --version Python 3.6.5 また、同時にpythonのバージョン確認をコードの中で行いました。結果は以下です。 3.6.5 (default, Feb 22 2019, 21:17:52) [GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)] Traceback (most recent call last): File "/Users/xxx", line 4, in <module> import urllib.request ImportError: No module named request 以上です
hayataka2049

2019/05/07 03:49

実行時カレントディレクトリにurllibの含まれるファイル/ディレクトリはないということでよろしいですか? import sys;print(sys.path)の結果を教えてください。
kyonmn

2019/05/07 03:52

申し訳ございません。実名が出てしまうので検証結果をお見せすることはできないのですが、同名のファイルは確認できませんでした。
hayataka2049

2019/05/07 03:54

実名部分だけ適当な文字列(hogeなど)で置換して貼ってみてください。
hayataka2049

2019/05/07 03:57

python3で実行していて、同名ファイル等の問題もないとしたら、インタプリタが壊れているか、インポートパスが変か・・・あと何があるかな。ちょっと考えておきますが、とりあえず今は可能性を一つずつ潰していくことです。
kyonmn

2019/05/07 03:57

['/Users/hoge/Desktop/flightradar24JSON', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python27.zip', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python2.7', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python2.7/plat-darwin', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python2.7/plat-mac', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python2.7/lib-tk', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python2.7/lib-old', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/hoge/Desktop/flightradar24JSON/venv/lib/python2.7/site-packages'] (venv) hogeMacBook-Pro:flightradar24JSON hoge$ sudo python ~/Desktop/flightradar24JSON/sample.py
hayataka2049

2019/05/07 05:28 編集

ん、pathを見るとpython2系のpathですね。でも、同時にsys.version見てみても、python3.6.5なんですよね?(一応もう一度確認お願いします。sys.pathと同時に(同じコード内に確認コードを入れて))
kyonmn

2019/05/07 07:13

3.7に変わりました…
hayataka2049

2019/05/07 07:49

質問者さんの環境がどうなっているのか把握できない状況ではアドバイスするのも難しいのですが、これを機に整理して自分で状態を把握できるようにすることをおすすめします。頑張ってください。
guest

0

urllibはいくつかのモジュールで構成されていますが、それらは別のモジュールなので、urllibをimportしても一括ではimportできません。
それぞれを指定してimportする必要があります。

urllib.requestを使うのであれば、

python

1import urllib.request

としてください。

投稿2019/05/07 03:28

TakaiY

総合スコア12743

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

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

kyonmn

2019/05/07 03:39

それを行うと以下のような結果になります。 import urllib.request ImportError: No module named request 追記致しました。申し訳ございませんでした。
guest

0

urllib.request を import しないといけないのでは?

import urllib.request
または
from urllib import request

投稿2019/05/07 03:20

tetsunosuke

総合スコア1292

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

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

kyonmn

2019/05/07 03:21

それを行うと以下のような結果になります。 import urllib.request ImportError: No module named request
hayataka2049

2019/05/07 03:34

質問者さんはpython3を使っているとは一言も書いていませんね。
kyonmn

2019/05/07 03:38

ターミナルにてpythonのバージョン確認を行いました。 $ python --version Python 3.6.5 以上です
tetsunosuke

2019/05/07 03:40

> hayataka2049 さん 貼り付けられているコードにpython3という記述はありましたので、その前提で確認してみました。
hayataka2049

2019/05/07 03:42

>tetsunosuke あらら・・・見落としてました。すみません。
tetsunosuke

2019/05/07 03:43

> hayataka2049 さん いえいえ。 そして下の方で回答されている内容の疑いがたしかにありそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問