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

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

ただいまの
回答率

90.49%

  • Python

    8541questions

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

  • Python 3.x

    6859questions

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

Thonny(Python)でアクセス先のソースを取得したい。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,645

KokoCoupon

score 5

よろしくお願いします。
python3.5使ってホームページのソースコードを表示させるプログラムを組もうと思っています。
ネットで調べて適当なサンプルを動かしてみたのですがエラーが出て動きません。

import urllib.request

import urllib.request
response = urllib.request.urlopen("https://www.yahoo.co.jp/")
result = response.read()
print(result)
>>> %Run getHTML.py
Traceback (most recent call last):
  File "C:\Thonny\lib\urllib\request.py", line 1318, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "C:\Thonny\lib\http\client.py", line 1239, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Thonny\lib\http\client.py", line 1285, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:\Thonny\lib\http\client.py", line 1234, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Thonny\lib\http\client.py", line 1026, in _send_output
    self.send(msg)
  File "C:\Thonny\lib\http\client.py", line 964, in send
    self.connect()
  File "C:\Thonny\lib\http\client.py", line 1392, in connect
    super().connect()
  File "C:\Thonny\lib\http\client.py", line 936, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "C:\Thonny\lib\socket.py", line 704, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "C:\Thonny\lib\socket.py", line 743, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11004] getaddrinfo failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\xxxxx\Desktop\getHTML.py", line 4, in <module>
    response = urllib.request.urlopen("https://www.yahoo.co.jp/")
  File "C:\Thonny\lib\urllib\request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Thonny\lib\urllib\request.py", line 526, in open
    response = self._open(req, data)
  File "C:\Thonny\lib\urllib\request.py", line 544, in _open
    '_open', req)
  File "C:\Thonny\lib\urllib\request.py", line 504, in _call_chain
    result = func(*args)
  File "C:\Thonny\lib\urllib\request.py", line 1361, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:\Thonny\lib\urllib\request.py", line 1320, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 11004] getaddrinfo failed>
>>> 

どうも社内のProxyが邪魔しているのではないかとおもっているのですが、
PROXYの設定方法がよくわからないので教えてください。


 解決

社内プロキシのせいで通信が出来なかった事が原因でした。
HTTP_PROXYにプロキシアドレスを設定してみましたが上手くいかなかった。
なので以下の方法でProxyを設定してみた所、取りあえず取得する事が出来た。

import urllib.request

PROXIES = {
    'http' : 'http://proxy.example.co.jp:80080' # プロキシのアドレスを指定
}
proxy_handler = urllib.request.ProxyHandler(PROXIES)
opener = urllib.request.build_opener(proxy_handler)
data = opener.open('http://www.google.co.jp').read()
print(data)

コメントで教えて頂いたRequestsパッケージの導入方法については別件で質問しました(解決済)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

Python2.7の事例ですが、こんな事例がありました。

Sphinxをインストールしようとしたら全然関係ないproxy周りでハマった話Add Star - kk_Atakaの日記

この記事によると

色々試行錯誤し、とりあえず環境を一回きれいにしてみようとHTTP_PROXYもクリアした状態でダメ元で実行してみた…らいけた…だと…。

ということなので、もしWindowsでしたら、こちらを試すのも一つかと。


もしくは、urllibはやや低いレイヤーのものなので、Requestsパッケージを使う方がよい気がします。

 参考資料

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/16 18:38

    導入してみたのですが以下の様なエラーが出ます。
    installが上手くいってないのだと思いますが何かパスの設定とか必要ですか?

    ----------------------------

    import requests

    res = requests.get('http://google.com/')
    print(res.status_code) #=> 200

    ----------------------------

    Python 3.6.1
    >>> %cd 'C:\Users\usr\Desktop'
    >>> %Run connect.py
    Traceback (most recent call last):
    File "C:\Users\usr\Desktop\connect.py", line 1, in <module>
    import requests
    ModuleNotFoundError: No module named 'requests'
    >>>

    キャンセル

  • 2017/09/19 10:10

    返信が遅れてすみません。
    おそらく実行環境はSpyderだと思われますが、Python自体のインストール方法や、Requestsのインストール方法をお伝えいただけると幸いです。

    キャンセル

  • 2017/09/22 18:56

    返信おくれてすみません。
    原因はやはり社内のプロキシが原因で通信が出来なかったようです。
    Requestパッケージの方も社内プロキシ(とIDE)の問題でした。

    修正は補足に追加しました。
    本当にありがとうございます。

    キャンセル

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    XMLページのタグ内容の取得方法

    webページにアクセスして、XML解析をしたい 以下のようなXMLで書かれたWebページがあります。 <outgoingServer type="smtp"> <hostn

  • 解決済

    PythonでWebスクレイピングを行うと文字化けします。

    pythonでWebスクレイピングを行おうとしているのですが、出力が文字化けします。 下記のコードが文字化けしている出力です。sucraping_naver.pyのファイルを実行

  • 受付中

    Raspberry Pi Python2.7を用いたサーバへのデータ転送

    Raspberry Pi2 model Bを使用してサーバへのデータ転送を行いたいと思っています。しかし、コードがわからず困っています。使用言語はPython2.7です。 具

  • 解決済

    pythonでのTCP通信

    サイバーセキュリティプログラミングという本でkali-linuxを用いてクライアントとサーバーの通信をするプログラムをそのまま書き写して実行したのですが、よく分からない点があるので

  • 解決済

    pyzmq ブローカーを作成したい

    クライアント→サーバー←クライアントという風にクライアントの仲介役を作成したいです http://pyzmq.readthedocs.io/en/latest/index.h

  • 解決済

    Python - バイナリデータで読み込んだ画像を保存せずにイロイロ

    Python3です  やりたいこと 画像URLから画像を引っ張ってイチャコラするときに、一旦保存して編集しているプロセスをすっ飛ばしたい。  具体的に import

  • 解決済

    Pythonにて

    例えばhttp://sample.com/a/b/c/d/e/1?ima=0000&cd=member にブログの1ページ目があるとします。 2ページ目は http://sa

  • 受付中

    UnicodeEncodeErrorが抜けなくて困っています

    現在、python ver3.4.3を使いスクレイピングをしているのですが、 取得してきた結果の中にエラーが発生する文字があり、処理が出来ません。 文字コード変換に関する様々なサイ

同じタグがついた質問を見る

  • Python

    8541questions

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

  • Python 3.x

    6859questions

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