Http協(xié)議簡述
引自:Python3.x爬蟲教程:爬網(wǎng)頁、爬圖片稿黍、自動登錄
HTTP是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫镣衡。
Http請求響應(yīng)模型:
Http請求流程(又稱為事務(wù)):
- 建立連接
- 建立連接后暇番,客戶機(jī)發(fā)送一個請求給服務(wù)器嗤放,請求方式的格式為:統(tǒng)一資源標(biāo)識符(URL)、協(xié)議版本號壁酬,后邊是MIME信息包括請求修飾符斤吐、客戶機(jī)信息和可能的內(nèi)容。
- 服務(wù)器接到請求后厨喂,給予相應(yīng)的響應(yīng)信息,其格式為一個狀態(tài)行庄呈,包括信息的協(xié)議版本號蜕煌、一個成功或錯誤的代碼,后邊是MIME信息包括服務(wù)器信息诬留、實(shí)體信息和可能的內(nèi)容斜纪。
- 客戶端接收服務(wù)器所返回的信息通過瀏覽器顯示在用戶的顯示屏上贫母,然后客戶機(jī)與服務(wù)器斷開連接。
請求報頭
請求報頭允許客戶端向服務(wù)器端傳遞請求的附加信息以及客戶端自身的信息盒刚。
** 常用報頭:**
** 1. Accept **
Accept請求報頭域用于指定客戶端接受哪些類型的信息腺劣。
**eg **:Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;
Accept:text/html因块,表明客戶端希望接受html文本橘原。
** 2. Accept-Charset **
Accept-Charset請求報頭域用于指定客戶端接受的字符集。
** eg **:Accept-Charset:iso-8859-1,gb2312.如果在請求消息中沒有設(shè)置這個域涡上,缺省是任何字符集都可以接受趾断。
** 3. Accept-Encoding **
Accept-Encoding請求報頭域類似于Accept,但是它是用于指定可接受的內(nèi)容編碼吩愧。
** eg **:Accept-Encoding:gzip.deflate.如果請求消息中沒有設(shè)置這個域服務(wù)器假定客戶端對各種內(nèi)容編碼都可以接受芋酌。
** 4. Accept-Language **
Accept-Language請求報頭域類似于Accept,但是它是用于指定一種自然語言雁佳。
** eg **:Accept-Language:zh-cn.如果請求消息中沒有設(shè)置這個報頭域脐帝,服務(wù)器假定客戶端對各種語言都可以接受。Authorization
** 5. Host **
Host請求報頭域主要用于指定被請求資源的Internet主機(jī)和端口號糖权。
** eg **:http://www.guet.edu.cn/index.html
Host:www.guet.edu.cn 此處使用缺省端口號80
** 6. User-Agent **
User-Agent請求報頭域允許客戶端將它的操作系統(tǒng)堵腹、瀏覽器和其它屬性告訴服務(wù)器。不過温兼,這個報頭域不是必需的秸滴。
響應(yīng)報頭
響應(yīng)報頭允許服務(wù)器傳遞不能放在狀態(tài)行中的附加響應(yīng)信息,以及關(guān)于服務(wù)器的信息和對Request-URI所標(biāo)識的資源進(jìn)行下一步訪問的信息募判。
**1. Location **
Location響應(yīng)報頭域用于重定向接受者到一個新的位置荡含。Location響應(yīng)報頭域常用在更換域名的時候。
** 2.Server **
Server響應(yīng)報頭域包含了服務(wù)器用來處理請求的軟件信息届垫。
** 3.WWW-Authenticate **
WWW-Authenticate響應(yīng)報頭域必須被包含在401(未授權(quán)的)響應(yīng)消息中释液,客戶端收到401響應(yīng)消息時候,并發(fā)送Authorization報頭域請求服務(wù)器對其進(jìn)行驗(yàn)證時装处,服務(wù)端響應(yīng)報頭就包含該報頭域误债。
** eg **:WWW-Authenticate:Basic realm=Basic Auth Test! //可以看出服務(wù)器對請求資源采用的是基本驗(yàn)證機(jī)制。
Python3 爬蟲入門
#python3.4
#這是一個簡單的示例
import urllib.request
url = 'http://douban.com/'
webPage = urllib.request.urlopen(url)
data = webPage.read()
data = data.decode('UTF-8')
print(data) #顯示網(wǎng)頁源代碼
print(type(webPage)) #顯示網(wǎng)頁類型:<class 'http.client.HTTPResponse'>
print(webPage.geturl()) #顯示網(wǎng)址:https://www.douban.com/
print(webPage.info()) #顯示網(wǎng)頁信息
'''Date: Thu, 13 Oct 2016 13:33:16 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 95363
Connection: close
Vary: Accept-Encoding
X-Xss-Protection: 1; mode=block
X-Douban-Mobileapp: 0
Expires: Sun, 1 Jan 2006 01:00:00 GMT
Pragma: no-cache
Cache-Control: must-revalidate, no-cache, private
Set-Cookie: ll="118318"; path=/; domain=.douban.com; expires=Fri, 13-Oct-2017 13:33:16 GMT
Set-Cookie: bid=GPcbKhAfcmA; Expires=Fri, 13-Oct-17 13:33:16 GMT; Domain=.douban.com; Path=/
X-DOUBAN-NEWBID: GPcbKhAfcmA
X-DAE-Node: sindar10c
X-DAE-App: sns
Server: dae
Strict-Transport-Security: max-age=15552000; '''
print(webPage.getcode()) #返回狀態(tài)碼:200