読者です 読者をやめる 読者になる 読者になる

或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。おバカなことが大好きです。

urllib2でインターネットリソースを取得する

Python

私のサブブログを題材にurllib2を使って、インターネットリソースを取得してみました。備忘録と情報共有を兼ねて書きます。

題材にしたサイト

oneshotlife_tom on Blogger

examples

urlをopen

>>> import urllib2
>>> url = 'http://www.oneshotlife.net/'
>>> res = urllib2.urlopen(url)

resの属性を表示

res.close      res.fp         res.headers    res.next       res.readlines
res.code       res.getcode    res.info       res.read       res.url
res.fileno     res.geturl     res.msg        res.readline   

resの属性でよく使いそうものを使ってみた

msg

urlopenの戻り値

>>> res.msg
'OK'
getcode()

HTTPステータスコード
エラーコードは、上述のドキュメントにも記載されてあるが、一般的なHTTPと同じと考えてOK

>>> res.getcode()
200

今夜わかるHTTP (Network)

今夜わかるHTTP (Network)

url

urlの値

>>> res.url
'http://www.oneshotlife.net/'
>>> type(res.url)
<type 'str'>
geturl()

urlを取得するメソッド
urlとの違いは、値かメソッドかの違い

>>> res.geturl()
'http://www.oneshotlife.net/'
>>> type(res.geturl)
<type 'instancemethod'>
fp

もうちょっとローレベルレイヤの情報を操作するインスタンス

>>> res.fp
<socket._fileobject object at 0x9899b2c>
>>> res.fp.
res.fp.bufsize          res.fp.flush            res.fp.readline
res.fp.close            res.fp.mode             res.fp.readlines
res.fp.closed           res.fp.name             res.fp.softspace
res.fp.default_bufsize  res.fp.next             res.fp.write
res.fp.fileno           res.fp.read             res.fp.writelines
read()

読み込んだ情報全部をreadするメソッド。めちゃくちゃ長くなるので割愛します。

>>> res.read()
readline()

一行一行読み込むメソッド

>>> res.readline()
'<!DOCTYPE html>\n'
>>> res.readline()
"<html b:version='2' class='v2' dir='ltr' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>\n"
>>> res.readline()
'<head>\n'

引数を指定すると文字数単位で読み込むみたい。

>>> res.readline(20)
"<meta content='IE=Em"
>>> res.readline(20)
"ulateIE7' http-equiv"
>>> res.readline(20)
"='X-UA-Compatible'/>"
>>> res.readline(20)
'\n'
readlines()

全情報を一行単位でリストにして返却するメソッド

>>> lines = res.readlines()
>>> len(lines)
1854
next()

一行一行読み込むメソッド。readlinesと組み合わせて使うと有効。

>>> res.next()
'<!DOCTYPE html>\n'
>>> res.next()
"<html b:version='2' class='v2' dir='ltr' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>\n"
>>> res.next()
'<head>\n'
>>> res.next()
"<meta content='IE=EmulateIE7' http-equiv='X-UA-Compatible'/>\n"