urllib2を使ってPOST,GETを投げてみように続きまして、次はCookieを有効にしてPOST,GETを送信する
場合を見ていきましょう。Cookieが無効だとアクセスする時に拒否されるサイトがあるからです
(mixiとかもそう)

Cookie関係の処理をしてくれる標準ライブラリcookielibを使います。
前回のプログラムからの変更点は、

・変更1
  #変更前
  import urllib
  import urllib2

  #変更後
  import urllib
  import urllib2
  import cookielib #追加:cookielibをインポート

・変更2
  #変更前
  opener = urllib2.build_opener()

  #変更後
  cj = cookielib.CookieJar() #CookieJarオブジェクトの取得
  opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))#build_openerにHTTPCookieProcessorを渡す

これでCookieを有効にした状態でPOST,GETリクエストが送信できるようになります。

urllibを使ってPOST、GETを投げてみよう


Yahoo検索にGETを投げる事ができたので、次は天下のgoogleさんにクエリを投げてみましょう。
  #! /bin/usr/env python
  # -*- coding:utf-8 -*-

  import urllib
  reqdata = {}
  reqdata['q'] = 'python'
  reqdata['lr'] = 'lang_ja'
  reqdata['ie'] = 'utf-8'
  reqdata['oe'] = 'utf-8'
  reqdata['aq'] = 't'
  reqdata['rls'] = 'org.mozilla:ja:official'
  reqdata['client'] = 'firefox-a'
  
  params = urllib.urlencode(reqdata)
  
  urllib.urlopen('http://www.google.co.jp/search?' + params)
  
とやって見ると、google先生からハジカレマス(なんてこった。 どうやらgoogleがurllibをハジイテいるようです。 そこで、urllib2を使ってUserAgentを書き換えてHTTPリクエストをします。。上のソースを下記のように変更。

  #! /bin/usr/env python
  # -*- coding:utf-8 -*-

  import urllib
  import urllib2 #urllib2をインポートする
  
  reqdata = {}
  reqdata['q'] = 'python'
  reqdata['lr'] = 'lang_ja'
  reqdata['ie'] = 'utf-8'
  reqdata['oe'] = 'utf-8'
  reqdata['aq'] = 't'
  reqdata['rls'] = 'org.mozilla:ja:official'
  reqdata['client'] = 'firefox-a'
  
  params = urllib.urlencode(reqdata)
  
  #クライアントを作成
  opener = urllib2.build_opener()
  
  #User AgentをMozillaに変更(User-AgentがPython-urllib/*.*となっているので、Mozillaに変更)
  opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.1)')]
  
  #urllib.urlopen('http://www.google.co.jp/search?' + params)
  #↑を作成したopenerを使ってopenするように変更
  opener.open(url + params) #受信したHTMLを表示したい場合はopener.open(url + params).read().decode('utf-8')
  
コレでgoogle先生もOKしてくれます(ゴマカシテごめんね)。


次回、Cookieを使ってPOST,GETを投げてみよう に続きます。

PythonでPOSTやGETリクエストを送信するにはurllibを使います(標準ライブラリ)。
実際のコーディングの流れとしては、

1.POST(GET)データの辞書データ作成
2.POST(GET)データからURL文字列にエンコード
3.HTTPリクエストの送信

となります。 では、実際のコードにとりかかります。

1.POST(GET)データの辞書データ作成
 例でYahooで「Python」と検索する場合には、
   #! /bin/usr/env python
   # -*- coding:utf-8 -*-

   import urllib

   reqdata[] = {}
   reqdata{'p'] = 'python' #検索文字列を設定
   reqdata['search.x'] = 1
   reqdata['fr'] = 'top_ga1'
   reqdata['tid'] = 'top_ga1'
   reqdata['ei'] = 'UTF-8' #文字コード

2.POST(GET)データからURL文字列にエンコード
 辞書データ(reqdata)からURL文字列にエンコードするには、urllib.urlencode()を使います。
   #辞書データからURL文字列にエンコード
   params = urllib.urlencode(reqdata)

3.HTTPリクエストの送信
 HTTPリクエストを送信するにはurllib.urlopen()を使います。
   ・POSTの場合
    urllib.urlopen('http://search.yahoo.co.jp/search?',params)
   ・GETの場合(yahooはGETを要求しているので、こっち)
    urllib.urlopen('http://search.yahoo.co.jp/search?' + params)

以上で、POST(GET)リクエストが送信できます。 さて次はgoogle先生に検索リクエストを投げてみましょう。


続き>urllib2を使ってPOST,GETを投げてみよう