python urllib
urllib ライブラリーの概要
urllib ライブラリーは、PythonでHTTPリクエストを行うための標準的なライブラリーです。Webページのデータを取得したり、URLのパースやエンコード、デコードなどを行うことができます。特にWebスクレイピングやAPIの利用において、データをやり取りする際に非常に役立ちます。
urllib の主要メソッドとその使い方
urllib.request.urlopen
URLに対してリクエストを送り、その応答を取得します。
import urllib.request
# 使用例
url = 'http://example.com'
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
print(html)
urllib.parse.urlencode
辞書型のデータをURLエンコードして、クエリ文字列を作成します。
import urllib.parse
# 使用例
params = {'name': 'John Doe', 'age': 30}
query_string = urllib.parse.urlencode(params)
print(query_string) # 出力: 'name=John+Doe&age=30'
urllib.parse.urlparse
URLをパースして、構成要素(スキーム、ネットロケーション、パス、クエリ文字列など)に分解します。
import urllib.parse
# 使用例
url = 'http://example.com/path/to/page?name=John&age=30'
parsed_url = urllib.parse.urlparse(url)
print(parsed_url.scheme) # 出力: 'http'
print(parsed_url.netloc) # 出力: 'example.com'
print(parsed_url.path) # 出力: '/path/to/page'
urllib.parse.urljoin
ベースURLと相対URLを結合して完全なURLを生成します。
import urllib.parse
# 使用例
base_url = 'http://example.com/path/to/'
relative_url = 'page.html'
full_url = urllib.parse.urljoin(base_url, relative_url)
print(full_url) # 出力: 'http://example.com/path/to/page.html'
urllib.error.URLError
HTTPリクエストが失敗した場合に発生するエラーです。
import urllib.request
import urllib.error
# 使用例
try:
response = urllib.request.urlopen('http://invalid-url.com')
except urllib.error.URLError as e:
print(e.reason)
活用場面、活用方法
Webページの内容を取得する場合や、APIからデータを取得する場合に使用します。
URLパラメータのエンコードやパースを行う際に、Webアプリケーションの開発やデータ収集の処理が簡単になります。
URLを解析して、異なるURLを組み合わせたり、特定の部分を取得する場合に利用します。
このライブラリーを使えば、こんなことができる!
WebページやAPIからのデータ取得
URLクエリパラメータの生成と解析
ベースURLに相対パスを追加して完全なURLを作成
HTTPリクエストのエラーハンドリング
ライブラリーを使わずに書いたコード
例えば、Webページの内容を取得する場合、urllibを使わずに低レベルのソケット操作で実装すると複雑になります:
import socket
# 使用例
host = 'example.com'
path = '/'
request = f"GET {path} HTTP/1.1\r\nHost: {host}\r\n\r\n"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 80))
s.sendall(request.encode())
response = s.recv(4096)
print(response.decode())
s.close()
ライブラリーを使って実装したコード
urllibを使うと、Webページの取得が非常に簡単になります:
import urllib.request
url = 'http://example.com'
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
print(html)
このように、urllibライブラリーを使用すると、HTTPリクエストやURL操作に関するコードがシンプルになり、簡単に扱うことができます。