おいも貴婦人ブログ

生物系博士課程満期退学をしたAIエンジニアのブログ。

urllib2を使ってサイトの情報をゲットしよう。

サーバーを立てると、サイト中に他のサイトの情報を載せたい場合があります。例えば、まとめサイトの運営とかも他のサイトの変化をキャッチして、それをまとめているのかもしれません。そのようなとき、Djangoサーバーでは、有効なライブラリーはurllib2ですね。
早速使い方

import urllib2

res=urllib2.urlopen('http://oimokihujin.hatenablog.com')
html=res.read()

このように、urlopenで指定されたURI(https,ftp etc...)を開き、データをゲットしてくれます。ここまでは一番簡単な方法で、サイトによってはこの方法が通用しません。なぜなら、ヘッダーに情報が入っていないからです。HTMLは、クライアントがリクエストを送り、サーバーがそれにレスポンスをする方法が採用されています。上記の方法を修正すると、

import urllib2

hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.8',
       'Connection': 'keep-alive'}

req=urllib2.Request('http://oimokihujin.hatenablocg.com/',headers=hdr)
res=urllib2.urlopen(req)
html=res.read()

因みに、わたしがデータをゲットしようとしたサイト(hdrを設定しないと、htmlをゲットできないサイト)は、hdrの値が全てnoneでもhtmlをゲットできました。