ウェブページを取得する
import requests
r = requests. get('https://www.baidu.com/')
print(type(r))
print(r. status_code)
print (type(r. text))
print(r. text)
print(r.cookies)
様々なご要望
# 发送一个 HTTP POST 请求:
r = requests.post("http://httpbin.org/post",
data = {'key':'value'})
r = requests.delete('http://httpbin.org/delete')
# 发送一个 HTTP delete 请求:
r = requests.head('http://httpbin.org/get')
# 发送一个 HTTP head 请求:
r = requests.options('http://httpbin.org/get')
# 发送一个 HTTP options 请求:
getリクエストを渡すパラメーターを作成する
GETリクエストの場合、パラメーターparamsを使用します
import requests
data={
"key1":"value1",
"key2":"value2"}
r = requests.get('http://httpbin.org/get', params=data)
print(r.url)
#http://httpbin.org/get?key1=value1&key2=value2
リストを値として渡すこともできます
import requests
data={
"key1":"value1",
"key2":["value2","value3"]}
r = requests.get('http://httpbin.org/get', params=data)
print(r.url)
#http://httpbin.org/get?key1=value1&key2=value2&key2=value3
注:辞書のキーはURLクエリ文字列に追加されません。
さらに、Webページの戻り値の型は実際にはstr型ですが、それは非常に特殊でJSON形式です。したがって、返された結果を直接解析して辞書形式を取得したい場合は、json()メソッドを直接呼び出すことができます。次に例を示します。
import requests
r = requests.get('http://httpbin.org/get')
print(r.json())
'''
{'args': {},
'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.23.0', 'X-Amzn-Trace-Id': 'Root=1-5e9b0b15-4d6629f8460bc48037fa4244'}, 'origin': '124.164.123.240', 'url': 'http://httpbin.org/get'}
'''
ウェブをクロールする
Zhihu-Newsページを例にとると、リクエストヘッダーを作成する必要があります。開発者ツールにあります。
import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0'
}
r = requests.get("https://daily.zhihu.com/",headers=headers)
print(r.text)
もちろん、headersパラメータに他のフィールド情報を追加できます。
バイナリデータを取得する
上記の例では、知っているページを取得しましたが、実際にはHTMLドキュメントが返されました。写真、オーディオ、ビデオなどをキャプチャしたい場合はどうすればよいですか?
画像、音声、ビデオのファイルは基本的にバイナリコードで構成されていますが、特定の保存形式と対応する分析方法により、これらのさまざまなマルチメディアしか見ることができません。したがって、それらを取得したい場合は、バイナリコードを取得する必要があります。
import requests
r = requests.get("https://github.com/favicon.ico")
with open("favicon.jpg","wb") as f:
f.write(r.content)
ここではopen()メソッドを使用しています。その最初のパラメーターはファイル名で、2番目のパラメーターは、ファイルにバイナリデータを書き込むことができるバイナリ書き込みの形式で開くことを表します。実行すると、favicon.icoという名前のアイコンがフォルダーに表示されます。
ここにループステートメントを作成して、データを継続的に取得します。
POSTリクエスト
import requests
data ={'name ':'germey', 'age':'22'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)
#部分输出:
# "form": {
# "age": "22",
# "name ": "germey"
#}
フォーム部分は送信されたデータであり、POSTリクエストが正常に送信されたことを証明します。
応答する
リクエストを送信すると、自然にレスポンスが取得されます。上記の例では、テキストとコンテンツを使用して応答のコンテンツを取得しました。さらに、ステータスコード、応答ヘッダー、Cookieなどの他の情報を取得するために使用できる多くの属性とメソッドがあります。
import requests
r = requests.get('http://www.baidu.com')
print(type(r.status_code), r.status_code)
print(type(r.headers), r.headers)
print ( type(r.cookies), r.cookies)
print(type(r. url), r. url)
print(type(r.history), r.history)
ここでは、ステータスコードを取得するためのstatus_code属性、応答ヘッダーを取得するためのheaders属性、Cookieを取得するためのcookies属性、URLを取得するためのurl属性、および要求履歴を取得するためのhistory属性を出力します。
ファイルのアップロード
import requests
files = {'file' : open ('favicon.ico','rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)
favicon.icoは現在のスクリプトと同じディレクトリにある必要があることに注意してください。もちろん、他のファイルがある場合は、他のファイルを使用してアップロードすることもできます。コードを変更するだけです。
このWebサイトは、filesフィールドを含む応答を返します。formフィールドは空です。これは、ファイルアップロードパーツに、識別するための個別のfileフィールドがあることを証明します。
クッキー
最初にcookieを取得する
import requests
r = requests.get('https://www.baidu.com')
print(r.cookies)
for key,value in r.cookies.items():
print(key + '=' + value)
#<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
#BDORZ=27315
ここでは、最初にCookieプロパティを呼び出してCookieを正常に取得します。CookieプロパティのタイプがRequestCookieJarであることがわかります。次に、items()メソッドを使用してタプルのリストに変換し、各Cookieの名前と値をトラバースして出力し、Cookieトラバーサル分析を実装します。
Cookieを直接使用してログインステータスを維持することもできます。次の例では、Zhihuを使用しています。
import requests
header={
'Host':'www.zhihu.com',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0',
'Cookie':'_zap=4f14e95a-0cea-4c5e-b2f7-45cfd43f9809; d_c0="AJCZtnMxyBCPTgURbVjB11p6-JAwsTtJB4E=|1581092643"; _xsrf=VaBV0QQwGFjz01Q9n2AmjAilhHrJXypa; tst=h; q_c1=516c72a5ff954c66b6563ff42e63387d|1585814979000|1582104705000; tshl=; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1587179989,1587216876,1587216886,1587267050; capsion_ticket="2|1:0|10:1587267052|14:capsion_ticket|44:YTUwMDY3MGYyNmJlNDU0ZTgxNjlhNjMwNWNkYzAxNmQ=|7b8a5ebd3649fb076617379e734a79cd7ef54d1242ddd1841aba6844c9d14727"; l_cap_id="YjJiNjc1MzY0ZmEzNGNlYjlkYThkODEyYmEzOWRiOTk=|1587222516|5a01a93ea68209c1116647750ed2131efa309a3d"; r_cap_id="N2EwMjY0N2NlNTM1NGZlMjliNGNhMGJmOTkyMDc1OTE=|1587222516|238b677c781f1ef90a7ad343d6cdd3871aff3269"; cap_id="OTVhNjZiMDQ3MDkzNGVjY2I5ZTUyNTlhOTcxNzk3Njg=|1587222516|6dd1ed77526aa949bccd4146ef218d8164804a6e"; KLBRSID=031b5396d5ab406499e2ac6fe1bb1a43|1587267062|1587267049; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1587267062; SESSIONID=wopWDVALc4X3RJObFrIWNChoNDJpogYSdBPicuRm7vV; JOID=WlgXBkLsoG-SjPrGduF5tDN1xettk80YycmkhT2OnDWm0rGBFgxg_8GF8MN9HDmwsdmzwZheWKVLuonghNnDleo=; osd=V1gXB0vhoG-ThffGduBwuTN1xOJgk80ZwMSkhTyHkTWm07iMFgxh9syF8MJ0ETmwsNC-wZhfUahLuojpidnDlOM=; z_c0="2|1:0|10:1587267060|4:z_c0|92:Mi4xT2JORUJnQUFBQUFBa0ptMmN6SElFQ1lBQUFCZ0FsVk45Qk9KWHdEa0NUcXVheUJDdnJtRzRUVEFHNjFqQThvd013|bb30373e1f13c8b751a3ffc09e8ab4c98780350f77989d93b20be7eb3a0b2fad"'
}
r = requests.get('https://www.zhihu.com/hot',headers=header)
print(r.text)
結果にはログイン後の結果も含まれます。もちろん、cookiesパラメーターを使用して設定することもできますが、RequestsCookieJarオブジェクトを作成し、Cookieを分割する必要があります。これは比較的面倒です
セッションの維持
リクエストでは、get()やpost()などのメソッドを直接使用する場合、確かにWebページのリクエストをシミュレートできますが、これは実際には異なるセッションと同等です。つまり、2つのブラウザーで開いたということです。別のページ。
実際、この問題を解決する主な方法は、同じセッションを維持することです。これは、新しいブラウザーを開くのではなく、新しいブラウザータブを開くことと同じです。しかし、毎回Cookieを設定したくないのですが、どうすればよいですか?現時点では、新しい武器セッションオブジェクトがあります。
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)
#{
# "cookies": {
# "number": "123456789" }}
セッションを使用すると、Cookieを気にすることなく同じセッションをシミュレートできます。通常は、ログイン成功後の次の操作をシミュレートするために使用されます。
SLL証明書の検証
さらに、リクエストは証明書の検証機能も提供します。HTTPリクエストを送信すると、SSL証明書がチェックされます。verifyパラメータを使用して、この証明書をチェックするかどうかを制御できます。実際、verifyパラメータが追加されていない場合、デフォルトはTrueであり、自動的に検証されます。
たとえば、12306 Webサイトは公式のCAによって信頼されていません。
import requests
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)
プロキシ設定
何度もアクセスした後で確認コードがポップアップしたり、ログイン認証ページにジャンプしたりしないようにするには、プロキシを設定してこの問題を解決する必要があります。これには、プロキシパラメータを使用する必要があります。次のように設定できます。
import requests
proxies = { 'http':'http:10 .10.1.10:3128',
'http':'http: //10.10.1.10: 1080', }
requests.get('https://www.taobao.com', proxies=proxies)
#代理无效,请换用自己的代理
リクエストはSOCKSプロキシもサポートしています。
タイムアウト設定
ローカルネットワークの状態が悪い場合、またはサーバーネットワークの応答が遅すぎる場合、または応答がない場合でも、応答を受信するまでに長い間待機したり、最終的に応答を受信しないときにエラーを報告したりする場合があります。サーバーが時間内に応答しないようにするには、タイムアウト期間を設定する必要があります。つまり、この時間後に応答がない場合は、エラーが報告されます。これには、タイムアウトパラメータが必要です。この時間の計算は、要求をサーバーに送信して応答を返す時間です。次に例を示します。
import requests
r=requests.get('https://www.taobao.com', timeout=1)
print(r.status_code)
永遠に待機したい場合は、タイムアウトを直接Noneに設定するか、デフォルトをNoneに設定しているため、設定せずに空白のままにしておくことができます。
認証
リクエストはタプルを書く簡単な方法を提供します。デフォルトでは認証にHTTPBasicAuthクラスを使用します。
import requests
r = requests.get('https://localhost:5000',
auth=(' username',' password'))
リクエストは、OAuth認証などの他の認証方法も提供します。