1、urllib實現: urllib是Python中的內置模塊
實現一個完整的請求與響應模型:urllib提供一個基礎函數urlopen,經過向指定的url發出請求來獲取數據。
import urllib.request
response = urllib.request.urlopen('http://www.zhihu.com')
html = response.read()
print(html)
2、httplib/urllib實現: httplib模塊是一個底層基礎模塊,能夠看到創建http請求的每一步,可是實現的功能比較少,在Python爬蟲開發中基本上用不到。
3、Requests實現:是Python爬蟲開發中最爲經常使用的方式。Requests庫是第三方模塊,須要額外進行安裝
pip3 install requests
一、實現完整的請求響應模型
(1)get方式:
import requests
r = requests.get('http://www.baidu.com')
print(r.text)
(2)post方式:
import requests
r = requests.post('http://www.baidu.com',data={‘key’:’value’})
print(r.text)
二、響應與編碼「:
import requests
r = requests.get('http://www.baidu.com')
print('content----->'+str(r.content))
print('text----->'+r.text)
print('encoding----->'+r.encoding)
r.encoding = 'utf-8'
print('text----→'+r.text)
r.content:返回的是字節形式
r.text:返回的是文本形式
r.encoding:返回的是根據HTTP頭猜想的網頁編碼格式
三、請求頭headers處理:在Requests的get函數中添加headers參數便可
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
headers = {'User-Agent':user_agent}
r = requests.get('http://www.baidu.com',headers=headers)
print('content----→'+str(r.content))
四、響應碼code和響應頭headers處理
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
headers = {'User-Agent':user_agent}
r = requests.get('http://www.baidu.com',headers=headers)
if r.status_code == requests.codes.ok:
print(r.status_code) #響應碼
print(r.headers) #響應頭
print(r.headers.get('content-type'))#獲取響應頭的某個字段(推薦)
else:
r.raise_for_status()
注意:raise_for_status()函數是用來主動地產生一個異常,當響應碼是4XX或5XX時,raise_for_status()函數會拋出異常,而響應碼爲200時,raise_for_status()函數返回None
五、Cookie處理:
(1)若響應中包含Cookie的值:
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
headers = {'User-Agent':user_agent}
r = requests.get('http://www.baidu.com',headers=headers)
for cookie in r.cookies.keys():
print(cookie+':'+r.cookies.get(cookie))
(2)自定義Cookie值發送出去:
import requests
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
headers = {'User-Agent':user_agent}
cookies = dict(name='maomi',age='3')
r = requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
print(r.text)
(3)自動處理Cookie:不須要關心Cookie的值,只但願每次訪問時,程序自動把Cookie帶上
import requests
loginUrl = 'http://www.sina.com/login'
s = requests.Session()
#首先訪問登陸界面,做爲遊客,服務器會先分配一個cookie
r = s.get(loginUrl,allow_redirects=True)
datas = {'name':'maomi','passwd':'maomi'}
#向登陸連接發送post請求,驗證成功,遊客權限轉爲會員權限
r = s.post(loginUrl,data=datas,allow_redirects=True)
print(r.text)
六、重定向和歷史信息:處理重定向只是須要設置一下 allow_redirects字段便可,將 allow_redirects設置爲True,則容許重定向;設置爲False,則禁止重定向。若是容許重定向,則能夠經過r.history字段查看歷史信息
七、超時設置:經過參數timeout來進行設置
八、代理設置:使用代理Proxy,能夠爲任意請求方法經過設置proxies參數來配置單個請求
import requests
proxies = {
"http":"http://0.10.1.10:3318",
"https":"http://10.10.1.10:1080"
}
requests.get("http://example.org",proxies=proxies)html