一、urllib實現: urllib是Python中的內置模塊
實現一個完整的請求與響應模型:urllib提供一個基礎函數urlopen,通過向指定的url發出請求來獲取數據。
import urllib.request
response = urllib.request.urlopen('http://www.zhihu.com')
html = response.read()
print(html)
二、httplib/urllib實現: httplib模塊是一個底層基礎模塊,可以看到建立http請求的每一步,但是實現的功能比較少,在Python爬蟲開發中基本上用不到。
三、Requests實現:是Python爬蟲開發中最為常用的方式。Requests庫是第三方模塊,需要額外進行安裝
pip3 install requests
1、實現完整的請求響應模型
(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)
2、響應與編碼“:
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頭猜測的網頁編碼格式
3、請求頭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))
4、響應碼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
5、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)
6、重定向和歷史信息:處理重定向只是需要設置一下 allow_redirects字段即可,將 allow_redirects設置為True,則允許重定向;設置為False,則禁止重定向。如果允許重定向,則可以通過r.history字段查看歷史信息
7、超時設置:通過參數timeout來進行設置
8、代理設置:使用代理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)