リクエストとurllibライブラリの違い

元のリンク:https://blog.csdn.net/sinat_37967865/article/details/85392207

個人学習の収集、侵入、削除

-------------------------------------------------- -------------------------------------------------- ---

Pythonクローラーを使用する場合、ネットワークリクエストの開始をシミュレートする必要があります。使用される主なライブラリは、リクエストライブラリとPython組み込みのurllibライブラリです。通常、リクエストの使用をお勧めします。これは、urllibの再カプセル化です。 。それらの使用の主な違い:
リクエストは、一般的なgetおよびpostリクエストを直接ビルドして開始できます。urllibは通常、最初にgetまたはpostリクエストをビルドしてから、リクエストを開始します。

import requests
 
Response_get = requests.get(url, params=None, **kwargs)
Response_post = requests.post(url, data=None, json=None, **kwargs)


上記のリクエストの後に取得するのはrequests.models.Responseオブジェクトであり、必要な情報を取得するために処理する必要
があります。Response_get.textはstrタイプを取得します。Response_get.content
はバイトタイプを取得します。これはデコードする必要があります。
JSONデータ型を取得するためのResponse_get.textResponse_get.json()と同等です

通常、最も単純なgetリクエストはrequests.get(url)ですが、リクエストをカスタマイズできます。たとえば、requests.get(url、headers = headers)
ヘッダーでは、User-Agentとcookieをカスタマイズでき
ます。単純なpostリクエストはrequests.post(url)ですが、requests.post(url、data)も使用できます。ここで、データはリスト、辞書、JSONなどです。

import urllib.request
 
req = urllib.request.Request(self, url, data=None, headers={},origin_req_host=None,unverifiable=False,method=None)
Response_request = urllib.request.urlopen(req)
Response = urllib.request.urlopen(url, data=None, timeout=1, cafile=None, capath=None, cadefault=False, context=None)


urllib.requestモジュールは、HTTPリクエストを作成する最も基本的な方法を提供します。これは、ブラウザーのリクエスト開始プロセスをシミュレートするために使用できます。
#同時に、認証(認証検証)、リダイレクト(リダイレクト)、Cookie(ブラウザCookie)、その他のコンテンツの処理も含まれています。
#コンテキストパラメータ。SSL設定を指定するために使用されるssl.SSLContextタイプである必要があります。2つのパラメータcafileとcapathは、CA証明書とそのパスを指定するためのものであり、HTTPSリンクを要求するときに役立ちます。
#cadefaultパラメーターは非推奨になり、デフォルトはFalseです。
#これはHTTPResposneタイプのオブジェクトであり、その主なメソッドには、read()、readinto()、getheader(name)、getheaders()、fileno()、およびその他の関数が含ま
れます。およびその他の属性。このオブジェクトを取得し
たら、それをresponseに割り当てます#次にresponseを使用してこれらのメソッドとプロパティを呼び出し、返された結果に関する一連の情報を取得できます。
#たとえば、response.read()は返されたウェブページのコンテンツを取得でき、response.statusは返された結果のステータスコードを取得できます。たとえば、200はリクエストが成功したことを意味し、404はウェブページが見つからないことを意味します。等

単純なgetリクエストはurllib.request.urlopen(url)です。ここで、urlはリンクまたはリクエストにすることができるため、
urllib.request.Request(url、headers = headers)を使用してリクエストヘッダーをカスタマイズし、次のように渡す必要があります。 request.urlopen()へのURL

以下は、2つのライブラリを使用する簡単な方法です。

import requests
import urllib.request
 
 
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
api ='http://open.iciba.com/dsapi/'
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'
    }
form_data = {
    "i": "word",
    "from": "AUTO",
    "to": "AUTO",
    "smartresult": "dict",
    "doctype": "json",
    "version": "2.1",
    "keyfrom": "fanyi.web",
    "action": "FY_BY_REALTIME",
    "typoResult": "false"
}
 
 
req1 = requests.get(url,headers=headers)
req_api = requests.get(api,headers=headers)
print(type(req1),type(req1.text),req1.text)              # requests.get().text是str类型
print("字符串",type(req1.content),req1.content)           # requests.get().content是bytes类型
print("与直接req1.text一致",req1.content.decode())
print("接口返回json格式",req_api.json())                  # 接口返回格式需要用requests.get().json()
 
 
# POST发送的data必须为bytes或bytes类型的可迭代对象,不能是字符串
form_data = urllib.parse.urlencode(form_data).encode()
# urllib.request.Request()只是一个请求:
req2 = urllib.request.Request(url,data=form_data,headers=headers)
print(type(req2))
 
 
req3 = urllib.request.urlopen(url)      # 不可以伪装你的User Agent,可以通过urllib.request.Request()伪装
print(type(req3),req3.status)           # http.client.HTTPResponse
print(req3.getheaders())                # 响应的信息集合
print(req3.read().decode("utf-8"))      # urllib.request.urlopen().read().decode("utf-8")相当于requests.get().text
 
req4 = urllib.request.urlopen(req2)     # 参数可以直接是一个请求
print("直接一个请求:",req4.read().decode("utf-8"))

 

おすすめ

転載: blog.csdn.net/yocencyy/article/details/106021521