urllibライブラリの使い方
urllibはURLにアクセスするライブラリです。
urllibモジュールは、Python 3 で urllib.request, urllib.parse, urllib.error に分割されて名称変更されました。
・urllib.request は URL を開いて読むためのモジュールです
・urllib.error は urllib.request が発生させる例外を持っています
・urllib.parse は URL をパース(構文解釈)するためのモジュールです
・urllib.robotparser は robots.txt ファイルをパースするためのモジュールです
○URLを開く
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
コンテクストマネージャとして機能するオブジェクトを返す。
メソッド:
・geturl() 取得したリソースのURLを返す。リダイレクトのチェック用。
・info() 取得したページのヘッダーなどのメタ情報をemail.message_from_string() インスタンスとして返す
・getcode() レスポンスの HTTP ステータスコード
(例)このブログのトップページのhtmlの最初の40文字を表示
①with asのコンテキストマネージャを利用する方法。
import urllib.request with urllib.request.urlopen('http://python-remrin.hatenadiary.jp/') as f: print(f.read(40)) #b'<!DOCTYPE html>\n<html\n lang="ja"\n\ndata
②with asを使わない方法。
import urllib.request f = urllib.request.urlopen('http://python-remrin.hatenadiary.jp/') print(f.read(40)) #b'<!DOCTYPE html>\n<html\n lang="ja"\n\ndata-
いずれもurlopen()はバイトオブジェクトを返している。(print()での表示が「b'」で始まっている)
○デコード
htmlのソースにと記述があれば、utf-8でエンコードされているので、htmlのデコードにもutf-8を使う。
このブログもutf-8でエンコードされているので、最初の100文字を表示してみる。
f = urllib.request.urlopen('http://python-remrin.hatenadiary.jp/') print(f.read(100).decode('utf-8'))
すると、以下のように表示される。
<!DOCTYPE html> <html lang="ja" data-admin-domain="//blog.hatena.ne.jp" data-author="rare_Remrin"
html全部を表示するときはread(100)の部分をread()に変更。
参考:
python3.5ドキュメント
urllib パッケージを使ってインターネット上のリソースを取得するには
[http://www.yoheim.net/blog.php?q=20160204:title=[Python] HTTP通信でGetやPostを行う]