About

地図会社で働いていたプログラマ。

2013年6月16日日曜日

Python3系のurllibモジュールでHTTP/GET, POSTを行う


HTTP/GETでWebページを取得する

# -*- coding: utf-8 -*-
import urllib.request

if __name__ == '__main__':
    page_text = ""
    # urlopenはurllib.responseオブジェクトを返す
    # urllib.responseはfileのようなオブジェクトで、infoメソッドとgeturlが追加されたもの
    with urllib.request.urlopen('http://www.google.co.jp') as page:
        # WebページのURLを取得する
        print(page.geturl())
        # infoメソッドは取得したページのメタデータを返す
        print(page.info())
        # readlinesでWebページを取得する
        for line in page.readlines():
            page_text = page_text + line.decode('Shift_JIS')
    print(page_text)


2. HTTP/POSTでWebページにデータを送信する

# -*- coding: utf-8 -*-
import urllib.request

if __name__ == '__main__':

    # はてなのログインURL
    LOGIN_URL = "https://www.hatena.ne.jp/login"
    post_data = {
                 'name': 'ログインID',
                 'password': 'ログインパスワード',
                 'persistent': '1',
                 'location': 'http://b.hatena.ne.jp/?&login_date=1371363089666',
                }
 
    
    # POSTで送信するデータをURLエンコードする
    encoded_post_data = urllib.parse.urlencode(post_data).encode(encoding='ascii')
    
    page_text = ""
    # urlopenのdata引数を指定するとHTTP/POSTを送信できる
    with urllib.request.urlopen(url=LOGIN_URL, data=encoded_post_data) as page:
        # WebページのURLを取得する
        print(page.geturl())
        # infoメソッドは取得したページのメタデータを返す
        print(page.info())
        # readlinesでWebページを取得する
        for line in page.readlines():
            page_text = page_text + line.decode('utf-8')
    print(page_text)