【狂人論壇】

 找回密碼
 註冊
搜尋

[分享] 正確認識python的request庫

[複製連結]

4

主題

20

金錢

0

積分

積分
0
guggilg 發表於 2020-1-7 16:35 | 顯示全部樓層 |閱讀模式

2015年我觸及 Python 的那時候,就得聞 Python 的網絡編程能力非常強悍。因而,在了解 Python 的基礎語法以後,我就和幾個小夥伴們壹塊兒協作,試著用 Python 的 urllib 和 urllib2 庫構建了壹個百度貼吧 Python 客戶端。
然而,應用的過程中,我發現了兩個標準庫的語法並不自然,以至於可以說非常反人類——用著很不舒服。又有,我平日應用 Python 甚少涉及網絡編程的內容。因而,Python 的網絡編程就被我放下了,直至我了解了 requests 庫。

初次了解 requests
requests 庫的宣言是

HTTP for Humans (給人用的 HTTP 庫)

我們最先來檢驗壹下。

在網絡編程中,最為基礎的任務包括:

    發送請求
    登入
    獲取數據
    解析數據
    反序列化重新打印獲得的內容

我們以 GitHub 為例,先看壹下應用 urllib2 要怎樣做。因為要把事兒弄簡單,我們假設實現已經知道,GET 請求 https://api.github.com/ 返回的內容是個 JSON 格式的數據(事實上通過 content-type 也可以判定)。

import urllib2
import json

gh_url  = 'https://api.github.com'
cs_user = 'user'
cs_psw  = 'password'

req = urllib2.Request(gh_url)

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, cs_user, cs_psw)

auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)

urllib2.install_opener(opener)

handler = urllib2.urlopen(req)

if handler.getcode() == requests.codes.ok:
    text = handler.read()
    d_text = json.loads(text)
    for k, v in d_text.items():
        print k, v

如果運行正確,那麽代碼應該返回:

issues_url https://api.github.com/issues
current_user_repositories_url https://api.github.com/user/repos{?type,page,per_page,sort}
rate_limit_url https://api.github.com/rate_limit
repository_url https://api.github.com/repos/{owner}/{repo}
...
user_repositories_url https://api.github.com/users/{user}/repos{?type,page,per_page,sort}
team_url https://api.github.com/teams

壹樣的作用,用 requests 庫則有如下代碼:

import requests

cs_url  = 'https://api.github.com'
cs_user = 'user'
cs_psw  = 'password'
r = requests.get(cs_url, auth=(cs_user, cs_psw))
if r.status_code == requests.codes.ok
    for k, v in r.json().items():
        print k, v

溢美之詞就不比說了,讀完在這裏的妳內心壹定會只有壹聲「握草,這才算 Python 該有的模樣」。那麽,接下去讓我們看壹下 requests 還有哪幾種黑魔法。

安裝

最受歡迎的方式,是直接安裝推薦過的 Anaconda。

當然如果妳不願安裝 Anaconda,那我建議妳采用 pip 安裝;只需在命令行下執行:

pip install requests


您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|聯絡站長|重灌狂人|狂人論壇

GMT+8, 2020-4-10 15:16

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回覆 返回頂部 返回列表