request庫
雖然Python的標準庫中urllib模塊已經包含了平常使用的大多數功能哨鸭,但是它的api使用起來讓人感覺不太好家制,而request宣傳是“HTTP for humans”估蹄,說明使用更簡潔方便皇忿。
安裝和文檔地址
利用pip可以非常方便的安裝:
pip install requests
發(fā)送get請求
1.最簡單的發(fā)送get請求就是通過requests.get來調用:
response = requests.get("http://www.baidu.com/")
2翘魄。添加headers和查詢參數:
如果想添加headers呢铆,可以傳入headers參數來增加請求頭中的headers信息。如果要將參數放在URL中傳遞罢防,可以利用params參數艘虎。相關示例代碼如下:
import requests
kw = {'wd':'中國'}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
# params 接收一個字典或者字符串的查詢參數,字典類型自動轉換為url編碼咒吐,不需要urlencode()
response = requests.get("http://www.baidu.com/s", params = kw, headers = headers)
# 查看響應內容野建,response.text 返回的是Unicode格式的數據
print(response.text)
# 查看響應內容,response.content返回的字節(jié)流數據
print(response.content)
# 查看完整url地址
print(response.url)
# 查看響應頭部字符編碼
print(response.encoding)
# 查看響應碼
print(response.status_code)
發(fā)送POST請求
1.最基本的post請求可以使用post方法:
response = requests.post("http://www.baidu.com/",data=data)
2.傳入data數據:
這時候就不要再使用urlencode進行編碼了恬叹,直接傳入一個字典進去就可以了候生。比如請求拉勾網的數據的代碼:
import requests
url = "https://www.lagou.com/jobs/positionAjax.json?city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false&isSchoolJob=0"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
}
data = {
'first': 'true',
'pn': 1,
'kd': 'python'
}
resp = requests.post(url,headers=headers,data=data)
# 如果是json數據,直接可以調用json方法
print(resp.json())
使用代理
使用request添加代理也非常簡單绽昼,只要在請求的方法中(比如get或者post)傳遞proxies參數就可以了唯鸭。示例代碼如下:
import requests
url = "http://httpbin.org/get"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
}
proxy = {
'http': '171.14.209.180:27829'
}
resp = requests.get(url,headers=headers,proxies=proxy)
with open('xx.html','w',encoding='utf-8') as fp:
fp.write(resp.text)
cookie
如果在一個響應中包含了cookie,那么可以利用cookies屬性拿到這個返回的cookie值:
session
之前使用urllib庫硅确,是可以使用opener發(fā)送多個請求目溉,多個請求之間是可以共享cookie。那么如果使用requests菱农,也要達到共享cookie的目的缭付,那么可以使用requests庫給我們提供session對象。注意循未,這里的session不是微博卡法中的那個session陷猫,這個地方只是一個會話的對象而已。還是以登錄人人網為例只厘,使用requests來實現烙丛。示例代碼如下:
import requests
url = "http://www.renren.com/PLogin.do"
data = {"email":"111111111@qq.com",'password':"pythonspider"}
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
}
# 登錄
session = requests.session()
session.post(url,data=data,headers=headers)
# 訪問個人中心
resp = session.get('http://www.renren.com/880151247/profile')
print(resp.text)
處理不信任的SSL證書:
對于那些已經被信任的SSL整數的網站舅巷,比如百度網羔味,那么使用requests直接就可以正常的返回響應。示例代碼如下:
resp = requests.get('http://www.12306.cn/mormhweb/',verify=False)
print(resp.content.decode('utf-8'))