requests模块的入门使用
學(xué)習(xí)目標(biāo):
1 為什么要重點(diǎn)學(xué)習(xí)requests模塊,而不是urllib
- requests的底層實(shí)現(xiàn)就是urllib
- requests在python2 和python3中通用,方法完全一樣
- requests簡單易用
- Requests能夠自動(dòng)幫助我們解壓(gzip壓縮的等)響應(yīng)內(nèi)容
2 requests的作用
作用:發(fā)送網(wǎng)絡(luò)請求,返回響應(yīng)數(shù)據(jù)
中文文檔 :?http://docs.python-requests.org/zh_CN/latest/index.html
通過觀察文檔來學(xué)習(xí):如何使用requests來發(fā)送網(wǎng)絡(luò)請求
3 requests模塊發(fā)送簡單的get請求、獲取響應(yīng)
需求:通過requests向百度首頁發(fā)送請求,獲取百度首頁的數(shù)據(jù)
import requests # 目標(biāo)url url = 'https://www.baidu.com' # 向目標(biāo)url發(fā)送get請求 response = requests.get(url)# 打印響應(yīng)內(nèi)容 print(response.text)response的常用屬性:
- response.text?響應(yīng)體 str類型
- respones.content?響應(yīng)體 bytes類型
- response.status_code?響應(yīng)狀態(tài)碼
- response.request.headers?響應(yīng)對(duì)應(yīng)的請求頭
- response.headers?響應(yīng)頭
- response.request.cookies?響應(yīng)對(duì)應(yīng)請求的cookie
- response.cookies?響應(yīng)的cookie(經(jīng)過了set-cookie動(dòng)作)
思考:text是response的屬性還是方法呢?
- 一般來說名詞,往往都是對(duì)象的屬性,對(duì)應(yīng)的動(dòng)詞是對(duì)象的方法
3.1 response.text 和response.content的區(qū)別
-
response.text
- 類型:str
- 解碼類型: requests模塊自動(dòng)根據(jù)HTTP 頭部對(duì)響應(yīng)的編碼作出有根據(jù)的推測,推測的文本編碼
- 如何修改編碼方式:response.encoding=”gbk”
-
response.content
- 類型:bytes
- 解碼類型: 沒有指定
- 如何修改編碼方式:response.content.deocde(“utf8”)
獲取網(wǎng)頁源碼的通用方式:
以上三種方法從前往后嘗試,能夠100%的解決所有網(wǎng)頁解碼的問題
所以:更推薦使用response.content.deocde()的方式獲取響應(yīng)的html頁面
3.2 練習(xí):把網(wǎng)絡(luò)上的圖片保存到本地
我們來把www.baidu.com的圖片保存到本地
思考:
- 以什么方式打開文件
- 保存什么格式的內(nèi)容
分析:
- 圖片的url:?https://www.baidu.com/img/bd_logo1.png
- 利用requests模塊發(fā)送請求獲取響應(yīng)
- 以2進(jìn)制寫入的方式打開文件,并將response響應(yīng)的二進(jìn)制內(nèi)容寫入
4 發(fā)送帶header的請求
我們先寫一個(gè)獲取百度首頁的代碼
import requestsurl = 'https://www.baidu.com'response = requests.get(url)print(response.content)# 打印響應(yīng)對(duì)應(yīng)請求的請求頭信息 print(response.request.headers)4.1 思考
對(duì)比瀏覽器上百度首頁的網(wǎng)頁源碼和代碼中的百度首頁的源碼,有什么不同?
代碼中的百度首頁的源碼非常少,為什么?
4.2 為什么請求需要帶上header?
模擬瀏覽器,欺騙服務(wù)器,獲取和瀏覽器一致的內(nèi)容
4.3 header的形式:字典
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"}
4.4 用法
requests.get(url, headers=headers)
4.5 完整的代碼
import requestsurl = 'https://www.baidu.com'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"}# 在請求頭中帶上User-Agent,模擬瀏覽器發(fā)送請求 response = requests.get(url, headers=headers) # print(response.content)# 打印請求頭信息 print(response.request.headers)5 發(fā)送帶參數(shù)的請求
我們在使用百度搜索的時(shí)候經(jīng)常發(fā)現(xiàn)url地址中會(huì)有一個(gè)??,那么該問號(hào)后邊的就是請求參數(shù),又叫做查詢字符串
5.1 什么叫做請求參數(shù):
例1:?http://www.webkaka.com/tutorial/server/2015/021013/
例2:https://www.baidu.com/s?wd=python&a=c
例1中沒有請求參數(shù)!例2中?后邊的就是請求參數(shù)
5.2 請求參數(shù)的形式:字典
kw = {'wd':'長城'}
5.3 請求參數(shù)的用法
requests.get(url,params=kw)
5.4 關(guān)于參數(shù)的注意點(diǎn)
在url地址中, 很多參數(shù)是沒有用的,比如百度搜索的url地址,其中參數(shù)只有一個(gè)字段有用,其他的都可以刪除 如何確定那些請求參數(shù)有用或者沒用:挨個(gè)嘗試! 對(duì)應(yīng)的,在后續(xù)的爬蟲中,越到很多參數(shù)的url地址,都可以嘗試刪除參數(shù)
5.5 兩種方式:發(fā)送帶參數(shù)的請求
5.5.1 對(duì)https://www.baidu.com/s?wd=python發(fā)起請求可以使用requests.get(url, params=kw)的方式
# 方式一:利用params參數(shù)發(fā)送帶參數(shù)的請求 import requestsheaders = {"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"}# 這是目標(biāo)url # url = 'https://www.baidu.com/s?wd=python' # 最后有沒有問號(hào)結(jié)果都一樣 url = 'https://www.baidu.com/s?' # 請求參數(shù)是一個(gè)字典 即wd=python kw = {'wd': 'python'} # 帶上請求參數(shù)發(fā)起請求,獲取響應(yīng) response = requests.get(url, headers=headers, params=kw) # 當(dāng)有多個(gè)請求參數(shù)時(shí),requests接收的params參數(shù)為多個(gè)鍵值對(duì)的字典,比如 '?wd=python&a=c'-->{'wd': 'python', 'a': 'c'}print(response.content)5.5.2 也可以直接對(duì)https://www.baidu.com/s?wd=python完整的url直接發(fā)送請求,不使用params參數(shù)
# 方式二:直接發(fā)送帶參數(shù)的url的請求 import requestsheaders = {"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"}url = 'https://www.baidu.com/s?wd=python'# kw = {'wd': 'python'}# url中包含了請求參數(shù),所以此時(shí)無需params response = requests.get(url, headers=headers)6 作業(yè)
1.獲取新浪首頁,查看response.text 和response.content.decode()的區(qū)別
2.實(shí)現(xiàn)任意貼吧的爬蟲,保存網(wǎng)頁到本地
小結(jié)
- response.text?響應(yīng)體 str類型
- respones.content?響應(yīng)體 bytes類型
- response.status_code?響應(yīng)狀態(tài)碼
- response.request.headers?響應(yīng)對(duì)應(yīng)的請求頭
- response.headers?響應(yīng)頭
- response.request._cookies?響應(yīng)對(duì)應(yīng)請求的cookie
- response.cookies?響應(yīng)的cookie(經(jīng)過了set-cookie動(dòng)作)
- response.content.decode()
- response.content.decode("GBK")
- response.text
轉(zhuǎn)載于:https://www.cnblogs.com/zc2018/p/9464299.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的requests模块的入门使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDFS 核心原理
- 下一篇: 关于跨DB增量(增、改)同步两张表的数据