|
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
|
|