鍍金池/ 教程/ Python/ 第三方庫(kù)
標(biāo)準(zhǔn)庫(kù) (4)
如何成為 Python 高手
標(biāo)準(zhǔn)庫(kù) (6)
標(biāo)準(zhǔn)庫(kù) (3)
類(lèi)(2)
Pandas 使用 (2)
xml
用 tornado 做網(wǎng)站 (5)
文件(1)
練習(xí)
列表(3)
從小工到專(zhuān)家
除法
錯(cuò)誤和異常 (2)
函數(shù)(1)
用 tornado 做網(wǎng)站 (7)
為做網(wǎng)站而準(zhǔn)備
函數(shù)練習(xí)
標(biāo)準(zhǔn)庫(kù) (8)
Pandas 使用 (1)
回顧 list 和 str
字典(1)
用 tornado 做網(wǎng)站 (3)
字符串(1)
函數(shù)(2)
寫(xiě)一個(gè)簡(jiǎn)單的程序
將數(shù)據(jù)存入文件
語(yǔ)句(5)
SQLite 數(shù)據(jù)庫(kù)
集成開(kāi)發(fā)環(huán)境(IDE)
集合(1)
類(lèi)(1)
用 tornado 做網(wǎng)站 (6)
用 tornado 做網(wǎng)站 (2)
自省
語(yǔ)句(4)
錯(cuò)誤和異常 (1)
用 tornado 做網(wǎng)站 (4)
集合(2)
列表(1)
標(biāo)準(zhǔn)庫(kù) (1)
生成器
mysql 數(shù)據(jù)庫(kù) (1)
第三方庫(kù)
實(shí)戰(zhàn)
運(yùn)算符
類(lèi)(3)
字典(2)
語(yǔ)句(1)
數(shù)和四則運(yùn)算
語(yǔ)句(2)
文件(2)
MySQL 數(shù)據(jù)庫(kù) (2)
電子表格
迭代器
mongodb 數(shù)據(jù)庫(kù) (1)
特殊方法 (2)
特殊方法 (1)
字符編碼
編寫(xiě)模塊
用 tornado 做網(wǎng)站 (1)
標(biāo)準(zhǔn)庫(kù) (5)
函數(shù)(4)
類(lèi)(5)
字符串(2)
關(guān)于 Python 的故事
函數(shù)(3)
字符串(4)
處理股票數(shù)據(jù)
常用數(shù)學(xué)函數(shù)和運(yùn)算優(yōu)先級(jí)
字符串(3)
為計(jì)算做準(zhǔn)備
多態(tài)和封裝
類(lèi)(4)
迭代
語(yǔ)句(3)
錯(cuò)誤和異常 (3)
分析 Hello
Python 安裝
標(biāo)準(zhǔn)庫(kù) (2)
列表(2)
元組

第三方庫(kù)

標(biāo)準(zhǔn)庫(kù)的內(nèi)容已經(jīng)非常多了,前面僅僅列舉幾個(gè),但是 Python 給編程者的支持還不僅僅在于標(biāo)準(zhǔn)庫(kù),它還有不可勝數(shù)的第三方庫(kù)。因此,如果作為一個(gè) Python 編程者,即使你達(dá)到了 master 的水平,最好的還是要在做某個(gè)事情之前,在網(wǎng)上搜一下是否有標(biāo)準(zhǔn)庫(kù)或者第三方庫(kù)替你完成那件事。因?yàn)椋瑐ゴ蟮陌_克·牛頓爵士說(shuō)過(guò):

如果我比別人看得更遠(yuǎn),那是因?yàn)槲艺驹诰奕说募缟稀?/p>

編程,就要站在巨人的肩上。標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)以及其提供者,就是巨人,我們本應(yīng)當(dāng)謙卑地向其學(xué)習(xí),并應(yīng)用其成果。

安裝第三方庫(kù)

要是用第三方庫(kù),第一步就是要安裝,在本地安裝完畢,就能如同標(biāo)準(zhǔn)庫(kù)一樣使用了。其安裝方法如下:

方法一:利用源碼安裝

在 github.com 網(wǎng)站可以下載第三方庫(kù)的源碼(或者其它途徑),得到源碼之后,在本地安裝。

一般情況,得到的碼格式大概都是 zip 、 tar.zip、 tar.bz2 格式的壓縮包。解壓這些包,進(jìn)入其文件夾,通常會(huì)看見(jiàn)一個(gè) setup.py 的文件。如果是 Linux 或者 Mac(我是用 ubuntu,特別推薦哦),就在這里運(yùn)行 shell,執(zhí)行命令:

Python setup.py install

如果用的是 windows,需要打開(kāi)命令行模式,執(zhí)行上述指令即可。

如此,就能把這個(gè)第三庫(kù)安裝到系統(tǒng)里。具體位置,要視操作系統(tǒng)和你當(dāng)初安裝 Python 環(huán)境時(shí)設(shè)置的路徑而定。默認(rèn)條件下,windows 是在 C:\Python2.7\Lib\site-packages,Linux 在 /usr/local/lib/python2.7/dist-packages(這個(gè)只是參考,不同發(fā)行版會(huì)有差別,具體請(qǐng)讀者根據(jù)自己的操作系統(tǒng),自己找找),Mac 在 /Library/Python/2.7/site-packages

有安裝就要有卸載,卸載所安裝的庫(kù)非常簡(jiǎn)單,只需要到相應(yīng)系統(tǒng)的 site-packages 目錄,直接刪掉庫(kù)文件即卸載。

方法二:pip

用源碼安裝,不是我推薦的,我推薦的是用第三方庫(kù)的管理工具安裝。有一個(gè)網(wǎng)站,是專(zhuān)門(mén)用來(lái)存儲(chǔ)第三方庫(kù)的,所有在這個(gè)網(wǎng)站上的,都能用 pip 或者 easy_install 這種安裝工具來(lái)安裝。這個(gè)網(wǎng)站的地址:https://pypi.Python.org/pypi

首先,要安裝 pip(Python 官方推薦這個(gè),我當(dāng)然要順勢(shì)了,所以,就只介紹并且后面也只使用這個(gè)工具)。如果讀者跟我一樣,用的是 ubuntu 或者其它某種 Linux,基本不用這個(gè)操作,在安裝操作系統(tǒng)的時(shí)候已經(jīng)默認(rèn)把這個(gè)東西安裝好了(這還不是用 ubuntu 的理由嗎?)。如果因?yàn)槭裁丛?,沒(méi)有安裝,可以使用如下方法:

Debian and Ubuntu:

sudo apt-get install Python-pip

Fedora and CentOS:

sudo yum install python-pip

當(dāng)然,也可以這里下載文件get-pip.py,然后執(zhí)行 Python get-pip.py 來(lái)安裝。這個(gè)方法也適用于 windows。

pip 安裝好了。如果要安裝第三方庫(kù),只需要執(zhí)行 pip install XXXXXX(XXXXXX 代表第三方庫(kù)的名字)即可。

當(dāng)?shù)谌綆?kù)安裝完畢,接下來(lái)的使用就如同前面標(biāo)準(zhǔn)庫(kù)一樣。

舉例:requests 庫(kù)

以 requests 模塊為例,來(lái)說(shuō)明第三方庫(kù)的安裝和使用。之所以選這個(gè),是因?yàn)榍懊娼榻B了 urllib 和 urllib2 兩個(gè)標(biāo)準(zhǔn)庫(kù)的模塊,與之有類(lèi)似功能的第三方庫(kù)中 requests 也是一個(gè)用于在程序中進(jìn)行 http 協(xié)議下的 get 和 post 請(qǐng)求的模塊,并且被網(wǎng)友說(shuō)成“好用的要哭”。

說(shuō)明:下面的內(nèi)容是網(wǎng)友 1world0x00 提供,我僅做了適當(dāng)編輯。

安裝

pip install requests

安裝好之后,在交互模式下:

>>> import requests
>>> dir(requests)
['ConnectionError', 'HTTPError', 'NullHandler', 'PreparedRequest', 'Request', 'RequestException', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__build__', '__builtins__', '__copyright__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__version__', 'adapters', 'api', 'auth', 'certs', 'codes', 'compat', 'cookies', 'delete', 'exceptions', 'get', 'head', 'hooks', 'logging', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'session', 'sessions', 'status_codes', 'structures', 'utils']

從上面的列表中可以看出,在 http 中常用到的 get,cookies,post 等都赫然在目。

get 請(qǐng)求

>>> r = requests.get("http://www.itdiffer.com")

得到一個(gè)請(qǐng)求的實(shí)例,然后:

>>> r.cookies
<<class 'requests.cookies.RequestsCookieJar'>[]>

這個(gè)網(wǎng)站對(duì)客戶(hù)端沒(méi)有寫(xiě)任何 cookies 內(nèi)容。換一個(gè)看看:

>>> r = requests.get("http://www.1world0x00.com")
>>> r.cookies
<<class 'requests.cookies.RequestsCookieJar'>[Cookie(version=0, name='PHPSESSID', value='buqj70k7f9rrg51emsvatveda2', port=None, port_specified=False, domain='www.1world0x00.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]>

原來(lái)這樣呀。繼續(xù),還有別的屬性可以看看。

>>> r.headers
{'x-powered-by': 'PHP/5.3.3', 'transfer-encoding': 'chunked', 'set-cookie': 'PHPSESSID=buqj70k7f9rrg51emsvatveda2; path=/', 'expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'keep-alive': 'timeout=15, max=500', 'server': 'Apache/2.2.15 (CentOS)', 'connection': 'Keep-Alive', 'pragma': 'no-cache', 'cache-control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'date': 'Mon, 10 Nov 2014 01:39:03 GMT', 'content-type': 'text/html; charset=UTF-8', 'x-pingback': 'http://www.1world0x00.com/index.php/action/xmlrpc'}

>>> r.encoding
'UTF-8'

>>> r.status_code
200

下面這個(gè)比較長(zhǎng),是網(wǎng)頁(yè)的內(nèi)容,僅僅截取顯示部分:

>>> print r.text

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>1world0x00sec</title>
  <link rel="stylesheet" >
  <link rel="canonical"  />
  <link rel="stylesheet" type="text/css"  />
  <meta name="description" content="愛(ài)生活,愛(ài)拉芳。不裝逼還能做朋友。" />
  <meta name="keywords" content="php" />
  <link rel="pingback"  />

  ......

請(qǐng)求發(fā)出后,requests 會(huì)基于 http 頭部對(duì)相應(yīng)的編碼做出有根據(jù)的推測(cè),當(dāng)你訪問(wèn) r.text 之時(shí),requests 會(huì)使用其推測(cè)的文本編碼。你可以找出 requests 使用了什么編碼,并且能夠使用 r.coding 屬性來(lái)改變它。

>>> r.content
'\xef\xbb\xbf\xef\xbb\xbf<!DOCTYPE html>\n<html lang="zh-CN">\n  <head>\n    <meta charset="utf-8">\n    <meta name="viewport" content="width=device-width, initial-scale=1.0">\n    <title>1world0x00sec</title>\n    <link rel="stylesheet" >\n            <link ......

以二進(jìn)制的方式打開(kāi)服務(wù)器并返回?cái)?shù)據(jù)。

post 請(qǐng)求

requests 發(fā)送 post 請(qǐng)求,通常你會(huì)想要發(fā)送一些編碼為表單的數(shù)據(jù)——非常像一個(gè) html 表單。要實(shí)現(xiàn)這個(gè),只需要簡(jiǎn)單地傳遞一個(gè)字典給 data 參數(shù)。你的數(shù)據(jù)字典在發(fā)出請(qǐng)求時(shí)會(huì)自動(dòng)編碼為表單形式。

>>> import requests
>>> payload = {"key1":"value1","key2":"value2"}
>>> r = requests.post("http://httpbin.org/post")
>>> r1 = requests.post("http://httpbin.org/post", data=payload)

http 頭部

>>> r.headers['content-type']
'application/json'

注意,在引號(hào)里面的內(nèi)容,不區(qū)分大小寫(xiě)'CONTENT-TYPE'也可以。

還能夠自定義頭部:

>>> r.headers['content-type'] = 'adad'
>>> r.headers['content-type']
'adad'

注意,當(dāng)定制頭部的時(shí)候,如果需要定制的項(xiàng)目有很多,需要用到數(shù)據(jù)類(lèi)型為字典。

網(wǎng)上有一個(gè)更為詳細(xì)敘述有關(guān) requests 模塊的網(wǎng)頁(yè),可以參考:http://requests-docs-cn.readthedocs.org/zh_CN/latest/index.html


總目錄   |   上節(jié):標(biāo)準(zhǔn)庫(kù)(8)   |   下節(jié):存入文件

如果你認(rèn)為有必要打賞我,請(qǐng)通過(guò)支付寶:qiwsir@126.com,不勝感激。