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"
)