ホームページ >バックエンド開発 >Python チュートリアル >PythonのRequestsモジュールの使い方を詳しく解説

PythonのRequestsモジュールの使い方を詳しく解説

巴扎黑
巴扎黑オリジナル
2017-08-16 13:20:561949ブラウズ

Requests モジュールは、ネットワーク アクセスに使用されるモジュールです。実際、urllib、urllib2、httplib、httplib2 など、基本的に同様の機能を提供するモジュールが多数あります。なぜ Requests モジュールが目立つのでしょうか。公式ウェブサイトを開いて見てください。これは「人間」用の http モジュールです。それで、それはどれほど人間的ですか?これまでに urllib などのモジュールを使用したことがある場合は、これが非常に使いやすいことがわかると思います。

1. インポート

ダウンロードが完了したら、モジュールのインポートは非​​常に簡単です。コードは次のとおりです:

import requests

2. リクエスト URL

ここでは、get リクエストまたは post リクエストを送信するための最も一般的な構文をリストします。

1. パラメーターなしで get リクエストを送信します。

r=requests.get("http://php.cn/justTest")

これで、応答オブジェクト r を取得できます。このオブジェクトを使用して、必要な情報を取得できます。

上記の例では、get リクエストにパラメータがありません。リクエストにパラメータが必要な場合はどうなりますか?

2. パラメーターを指定して get リクエストを送信します

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://php.cn/justTest", params=payload)

上記からわかるように、get パラメーターは params キーワード パラメーターとして渡されます。

リクエストされた特定の URL を出力して、それが正しいかどうかを確認できます:

>>>print r.url
http://pythontab.com/justTest?key2=value2&key1=value1

正しい URL が実際にアクセスされたことがわかります。

リクエスト パラメータにリストを渡すこともできます:

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get("http://php.cn/justTest", params=payload)
>>> print r.url
http://pythontab.com/justTest?key1=value1&key2=value2&key2=value3

上記は get リクエストの基本形式です。

3. 投稿リクエストを送信します

r = requests.post("http://php.cn/postTest", data = {"key":"value"})

上記からわかるように、投稿リクエストのパラメーターは data キーワード パラメーターとともに渡されます。

現在のデータパラメータは辞書を渡します。次のように、json 形式のデータを渡すこともできます。

>>> import json
>>> import requests
>>> payload = {"key":"value"}
>>> r = requests.post("http://php.cn/postTest", data = json.dumps(payload))

json 形式のデータを送信するのが一般的であるため、json のキーがリクエストの上位バージョンに追加されました。 Word パラメーターを使用すると、json モジュールを使用せずに json データを投稿リクエストに直接送信できます。以下を参照してください:

>>> payload = {"key":"value"}
>>> r = requests.post("http://php.cn/postTest", json=payload)

ファイルを投稿したい場合はどうすればよいですか?現時点では、files パラメーターを使用する必要があります:

>>> url = 'http://php.cn/postTest'
>>> files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)
>>> r.text

ファイルを投稿するときにファイル名などの追加情報を指定することもできます:

>>> url = 'http://php.cn/postTest'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
>>> r = requests.post(url, files=files)

ヒント: ファイルを開くにはバイナリ モードを使用することを強くお勧めします。テキストファイル形式で開いた場合、「Content-Length」ヘッダーによりエラーが発生する可能性があります。

ご覧のとおり、リクエストを使用してリクエストを送信するのは簡単です。

3. 返品情報を取得する

リクエストを送信した後に返品情報を取得する方法を見てみましょう。上の例を引き続き使用してみましょう:

>>> import requests
>>> r=requests.get('http://php.cn/justTest')
>>> r.text

r.text はどのようなエンコード形式で出力されますか?

>>> r.encoding
'utf-8'

utf-8形式で出力されることが分かりました。 r.text の出力形式を変更したい場合はどうすればよいですか?

>>> r.encoding = 'ISO-8859-1'

これにより、出力形式が「ISO-8859-1」に変更されます。

r.contentという出力ステートメントもありますが、これとr.textの違いは何でしょうか? r.content はバイト ストリームを返します。これは、画像アドレスを要求し、画像を保存したい場合に使用できます。コード スニペットは次のとおりです。

def saveImage( imgUrl,imgName ="default.jpg" ):
    r = requests.get(imgUrl, stream=True)
    image = r.content
    destDir="D:\"
    print("保存图片"+destDir+imgName+"\n")
    try:
        with open(destDir+imgName ,"wb") as jpg:
            jpg.write(image)     
            return
    except IOError:
        print("IO Error")
        return
    finally:
        jpg.close

先ほど紹介した r.text は文字列を返します。リクエストに対するレスポンスがjsonになっているのですが、json形式のデータを直接取得することはできますか? r.json() はこれのために用意されています。

r.raw.read() を使用するだけで、サーバーから返された元のデータを取得することもできます。ただし、本当に元の戻りデータを取得したい場合は、リクエスト時に次のように「stream=True」オプションを追加することを忘れないでください:

r = requests.get('https://api.github.com/events', stream=True)。

応答ステータス コードを取得することもできます:

>>> r = requests.get('http://php.cn/justTest')
>>> r.status_code
200

リクエストを使用することもできます。 ok は戻り値 200 を指します:

>>> r.status_code == requests.codes.ok
True

4. ヘッダーに関しては、応答ヘッダーを出力できます:

>>> r= requests.get("http://php.cn/justTest")
>>> r.headers

`r.headers` は辞書を返します。例:

{
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '147ms',
    'etag': '"e1ca502697e5c9317743dc078f67693a"',
    'content-type': 'application/json'
}

判定のためにいくつかの応答ヘッダーを取得するには、次のメソッドを使用します:

r.headers['Content-Type']

または

r.headers.get('Content-Type')

リクエストヘッダー (つまり、サーバーに送信するヘッダー情報) を取得したい場合はどうすればよいでしょうか? r.request.headers を使用して直接取得できます。

同時に、データをリクエストするときにカスタムヘッダー (ヘッダーのキーワードパラメータを介して渡される) を追加することもできます:

>>> headers = {'user-agent': 'myagent'}
>>> r= requests.get("http://php.cn/justTest",headers=headers)

5. Cookie について

応答に Cookie が含まれている場合、次のメソッドを使用してそれらを取得できます:

>>> url = 'http://www.php.cn'
>>> r = requests.get(url)
>>> r.cookies['example_cookie_name']
'example_cookie_value'

独自の Cookie を送信することもできます (Cookie キーワード パラメーターを使用):

>>> url = 'http://php.cn/cookies'
>>> cookies={'cookies_are':'working'}
>>> r = requests.get(url, cookies=cookies)

6. リダイレクトについて

URL をリクエストすると、サーバーが自動的にリクエストをリダイレクトします (例: github は http リクエストを https にリダイレクトします)。リクエスト。 r.history を使用してリダイレクトを表示できます:

>>> r = requests.get('http://php.cn/')
>>> r.url
'http://php.cn/'
>>> r.history
[]

上の例からわかるように、アクセスには http プロトコルを使用しますが、r.url では https プロトコルが出力されます。では、サーバーが http プロトコルを使用することを主張する場合、つまりサーバーが自動的にリダイレクトすることを禁止する場合はどうすればよいでしょうか? allow_redirects パラメータを使用します:

r = requests.get('http://php.cn', allow_redirects=False)

7. リクエスト時間について

timeout パラメータを使用して URL のリクエスト タイムアウトを設定できます (時間単位は秒):

requests.get('http://php.cn', timeout=1)

8. プロキシについて

次のように、http または https アクセス用のプロキシ プログラムで指定します (proxies キーワード パラメーターを使用)。
proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}
requests.get("http://php.cn", proxies=proxies)

九、关于session

我们有时候会有这样的情况,我们需要登录某个网站,然后才能请求相关url,这时就可以用到session了,我们可以先使用网站的登录api进行登录,然后得到session,最后就可以用这个session来请求其他url了:

s=requests.Session()
login_data={'form_email':'youremail@example.com','form_password':'yourpassword'}
s.post("http://pythontab.com/testLogin",login_data)
r = s.get('http://pythontab.com/notification/')
print r.text

其中,form_email和form_password是豆瓣登录框的相应元素的name值。

十、下载页面

使用Requests模块也可以下载网页,代码如下:

r=requests.get("http://www.php.cn")
with open("haha.html","wb") as html:
    html.write(r.content)
html.close()

以上がPythonのRequestsモジュールの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。