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

巴扎黑
リリース: 2017-08-16 13:20:56
オリジナル
1904 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!