ホームページ  >  記事  >  バックエンド開発  >  Python がリクエストを使用して Web ページをリクエストする方法

Python がリクエストを使用して Web ページをリクエストする方法

WBOY
WBOY転載
2023-04-25 09:29:011759ブラウズ

Requests は urllib2 のすべての機能を継承します。

リクエストは、HTTP 接続の永続性と接続プーリングをサポートし、セッションを維持するための Cookie の使用をサポートし、ファイルのアップロードをサポートし、応答コンテンツのエンコードの自動決定をサポートし、国際化された URL と POST データの自動エンコードをサポートします。

インストール方法

pip を使用してインストール

$ pip install requests

GET リクエスト

基本的な GET リクエスト (ヘッダー パラメーターとパルマ パラメーター)

1. 最も基本的な GET リクエストは、get メソッド '

response = requests.get("http://www.baidu.com/")
 
# 也可以这么写
# response = requests.request("get", "http://www.baidu.com/")

2. ヘッダーとクエリ パラメーターを追加します

If ヘッダーを追加する場合は、headers パラメーターを渡して、リクエスト ヘッダーにヘッダー情報を追加できます。

URL でパラメータを渡したい場合は、params パラメータを使用できます。

import requests
 
kw = {'wd':'长城'}
 
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)
 
# 查看响应内容,response.text 返回的是Unicode格式的数据
print (response.text)
 
# 查看响应内容,response.content返回的字节流数据
print (respones.content)
 
# 查看完整url地址
print (response.url)
 
# 查看响应头部字符编码
print (response.encoding)
 
# 查看响应码
print (response.status_code)

実行結果

....

....

'http://www.baidu .com/s?wd=Great Wall'

'utf-8'

200

response.text を使用する場合、リクエストはテキストに基づいて行われます。 HTTP 応答のエンコーディング 応答コンテンツを自動的にデコードし、ほとんどの Unicode 文字セットをシームレスにデコードできます。

response.content を使用すると、サーバーの応答データの元のバイナリ バイト ストリームが返され、画像などのバイナリ ファイルの保存に使用できます。

POST メソッド

1. 基本的な POST リクエスト

response = requests.post("http://www.baidu.com/",data = data)

2.body パラメータ付き

formdata = {
    "type": "AUTO",
    "doctype": "json",
    "key": "www",
    "ue": "UTF-8",
}
url = "http://auto-installment/v1/loan-credit-check"
response = requests.post(url,data = data,headers=headers)
 
print(response.text)#显示返回结果
print(response.json())# 如果是json文件可以直接显示

注:

印刷結果は中国語で文字化けして表示されます。この問題を解決するには、json.dupms(response, ensure_ascii=False)) を使用してください。

Session

一般に、セッションを使用してクロスします。 -request 他のページにアクセスする前にログインするなど、特定のパラメータを常に維持してください

# 1. 创建session对象,可以保存Cookie值
session = requests.session()
 
# 2. 需要登录的用户名和密码
data = {"username": "mxxxx", "password": "1233444"}
 
# 3. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
session.post("https://www.jianshu.com/sign_in", data=data)
 
# 4. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = session.get("https://www.jianshu.com/writer#/")

落とし穴に関する注意

1. リクエストを使用してインターフェイスを要求すると、エラーが発生します。しかし、インターフェース自体には問題はありません。 これは、インターフェイスには単純なタイプ (通常は 3 つ未満) と複雑なオブジェクト タイプという 2 つのタイプのリクエスト パラメータがあるためです。

解決策: ヘッダーでこれら 2 つのパラメーターの型を定義します。

単純な型: headers={"Content-Type": "application/x-www-form-urlencoded"}

複雑なオブジェクト タイプ: headers={"Content-Type":application/json}

2。一部の HTTPS リクエストには SSL 証明書検証が含まれています

解決策: 応答= request.get("https://www.baidu.com/", verify=False)

Extension

1.リクエストが失敗した後、再試行メカニズムを追加します (失敗した場合は 3 回再試行されます)

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
session.mount('https://',request_retry)

2. grequests を使用して非同期リクエストを実装します

urls = [
    'http://www.url1.com',
    'http://www.url2.com',
    'http://www.url3.com',
    'http://www.url4.com',
    'http://www.url5.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)

3. カスタム cookie

セッション インスタンスを使用してリクエスト間で Cookie を保持しますが、特殊なケースではカスタム Cookie を使用する必要があります。

セッション インスタンスを使用してリクエスト間で Cookie を保持します。場合には、カスタム Cookie を使用する必要があります

# 自定义cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}
 
session.post('http://', cookies=cookie)

4. API リクエストにかかった時間をカウントします

session.get(url).elapsed.total_seconds()

5. リクエストのタイムアウトを設定します

session.get(url, timeout=15)

6. ファイルのアップロード

リクエストは、ファイル データの送信をシミュレートするパラメータとしてファイルを使用します

file = {'file':open('test.bmp','rb')}   #rb表示用二进制格式打开指定目录下的文件,且用于只读
r =requests.post('http://',files=file)
print(r.text)

以上がPython がリクエストを使用して Web ページをリクエストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。