Python の URL からデータを取得する
URL または Uniform Resource Locator は、インターネット上のリソースを指す有効で一意の Web アドレスです。このリソースには、単純なテキストファイル、zip ファイル、exe ファイル、ビデオ、画像、または Web ページがあります。
Web ページの場合、HTML またはハイパーテキストマークアップ言語のコンテンツがフェッチされます。この記事では、Python を使用して URL からこの HTML またはハイパーテキストマークアップ言語データを取得する方法を示します。
Python の requests モジュールを使用して URL からデータを取得する
Python には、HTTP(Hypertext Transfer Protocol)リクエストを簡単に送信する requests モジュールがあります。このモジュールを使用して、有効な URL から HTML コンテンツまたは任意のコンテンツをフェッチできます。
requests モジュールには、URL からデータをフェッチするために使用できる get() メソッドがあります。このメソッドは、引数として url を受け入れ、requests.Response オブジェクトを返します。
この requests.Response オブジェクトには、送信された HTTP リクエストに対するサーバーの応答に関する詳細が含まれています。この get() メソッドに無効な URL が渡されると、get() メソッドは ConnectionError 例外をスローします。
URL の有効性が不明な場合は、try ブロックと except ブロックを使用することを強くお勧めします。get() メソッド呼び出しを try および except ブロックで囲むだけです。これは、次の例で示されます。
ここで、この関数を使用して、有効な URL から HTML コンテンツまたは任意のデータをフェッチする方法を理解しましょう。同じことについては、次のコードを参照してください。
requests.Response オブジェクトの詳細については、公式ドキュメントこちらを参照してください。
import requests
try:
url = "https://www.lipsum.com/feed/html"
r = requests.get(url)
print("HTML:\n", r.text)
except:
print(
"Invalid URL or some error occured while making the GET request to the specified URL"
)
出力:
HTML:
...
... は、URL からフェッチされた HTML コンテンツを表すことに注意してください。HTML コンテンツは大きすぎるため、上記の出力には表示されていません。
URL に誤りがある場合、上記のコードは except ブロック内でコードを実行します。次のコードは、それがどのように機能するかを示しています。
import requests
try:
url = "https://www.thisisafaultyurl.com/faulty/url/"
r = requests.get(url)
print("HTML:\n", r.text)
except:
print(
"Invalid URL or some error occured while making the GET request to the specified URL"
)
出力:
Invalid URL or some error occurred while making the GET request to the specified URL
一部の Web ページでは、セキュリティ上の理由から、GET リクエストでコンテンツを取得することはできません。このような場合、requests モジュールの post() メソッドを使用できます。
名前が示すように、このメソッドは POST リクエストを有効な URL に送信します。このメソッドは、url と data の 2つの引数を受け入れます。
url はターゲット URL であり、data はキーと値のペアの形式でヘッダーの詳細の辞書を受け入れます。ヘッダーの詳細には、API またはアプリケーションプログラミングインターフェイスキー、CSRF またはクロスサイトリクエストフォージェリトークンなどがあります。
このような場合の Python コードは次のようになります。
import requests
try:
url = "https://www.thisisaurl.com/that/accepts/post/requests/"
payload = {
"api-key": "my-api-key",
# more key-value pairs
}
r = requests.post(url, data=payload)
print("HTML:\n", r.text)
except:
print(
"Invalid URL or some error occured while making the POST request to the specified URL"
)
