日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Request模块基本常识

發(fā)布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Request模块基本常识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • Request模塊簡介
    • 發(fā)送請求:
    • r.text
    • 定制請求頭:
    • 添加請求頭
    • Form表單提交數(shù)據(jù)
    • POST傳遞數(shù)據(jù)
  • 響應狀態(tài)碼
  • 響應頭
  • Cookie
  • 重定向與請求歷史
    • 重定向
    • 處理重定向
    • 超時
    • 錯誤與異常
  • 修改headers
      • 通過Request的headers參數(shù)修改
      • 通過request.add_header()方法修改

Request模塊簡介

我們可以在瀏覽器中抓取到這些請求與響應的內容,那么我們可以“偽造”請求嗎?也就是不再通過瀏覽器發(fā)送這些數(shù)據(jù),而是通過python來模擬瀏覽器發(fā)送請求。答案是可行的。而Request模塊就可以完成這種功能。
Requests模塊就是Python實現(xiàn)的簡單易用的HTTP庫

還有其他庫嗎?回答也是肯定的,例如urllib,urllib2,httplib,httplib2等模塊。但是目前來說Requests模塊是最流行的。而且也是做好用的模塊

發(fā)送請求:

使用Requests發(fā)送網絡請求非常簡單,一開始要導入requests模塊

import requests

然后,嘗試獲取某個網頁,在本例中,我們來獲取搜狗網頁首頁:

r=requests.get('https://www.sogou.com/')

現(xiàn)在,我們有一個名為r 的Response對象,我們可以從這個對象中獲取我們想要的信息。例如:打印出返回的內容

r.text

實際上,如果我們在瀏覽器上打開這個網址,右鍵選擇“查看網頁源代碼”,你會發(fā)現(xiàn),跟我們剛才打印出來的是一模一樣(如果沒有反爬或者網站是靜態(tài)網站)。也就是說,上面幾行代碼已經幫我們把搜狗的首頁的全部源代碼爬了下來。

拼接網址:
1.

import requests url='https://www.sogou.com/web?query='+'挖掘機小王子' response=request.get(url) print(response.text)
  • import requests url='https://www.sogou.com/web?‘ param={ 'query' : '挖掘機小王子' } response=request.get(url,params=param) print(response.text)

    注意:字典里的值為None的鍵都不會被添加到URL的查詢字符串中

    拓展知識:
    你還可以將一個列表傳入:

    import requests payload={’key1‘:'value1''key2':['value2''value3']} r=requests.get('http://httpbin.org/get',params=payload) print(r.url)

    打印的結果是: http://httpbin.org/get?key1=vavlue1&key2=value2&key2=value3

    文本響應內容
    我們能讀取服務器響應的內容。在此之前我們使用r.text來訪問服務器返回給我們的內容。并且我們可以看到返回的內容,神奇的是我們竟然沒有做任何關于編碼解碼的事情。其實

    requests會自動解碼來自服務器的內容。大多數(shù)UNICODE字符集都能被無縫地解碼。
    請求發(fā)出后,Requests會基于HTTP頭部隊響應的編碼作出有根據(jù)的推測。當你訪問r.text之時,requests會使用其推測的文本編碼。你可以找出Requests使用了什么編碼,并且能夠使用e.encoding屬性來改變它:
    r.encoding
    結果是’utf-8’

    r.encoding='gb2312'

    如果你改變了編碼,每當你訪問了r.text,Request都將會使用r.encoding的新值

    HTML頁面是可以設置編碼信息的,可以查看該編碼信息,然后設置r.encoding為相應的編碼
    這樣就能使用正確的編碼解析r.text了。而網頁的編碼可以在瀏覽器中去查看

    二進制:
    Requests會自動為你解碼gzip和deflate傳輸編碼的響應數(shù)據(jù)

    例如對于圖片信息,可以很方便的保存到文件中。對于圖片,mp3,視頻等數(shù)據(jù),往往要使用二進制的方式讀取
    import requests

    url='https://pic.sogou.com/pics/recompic/detail.jsp?category=%E7%BE%8E%E5%A5%B3&tag=%E5%86%99%E7%9C%9F#1%263976741' r=requests.get(url) print(r.content) with open('baidu.png','wb') as f: f.write(r.content)

    1.r.content是二進制信息
    2.open()打開文件對象 with是上下文管理器,它可以幫我們 自動關閉文件
    f=open()
    f.write()
    f.close()
    3.as是取一個別名,昵稱
    4.wb w是寫入,即使打開一個文件用來寫入數(shù)據(jù),b是寫入二進制數(shù)據(jù)
    r是讀取數(shù)據(jù)
    a是追加數(shù)據(jù),不覆蓋數(shù)據(jù)

    gbk gb2312

    定制請求頭:

    建立網站的最終目的是為了讓人來訪問,其實幾乎每個網站都不歡迎爬蟲。甚至現(xiàn)在越來越多的網站發(fā)現(xiàn)對方是爬蟲程序的時候就會 直接禁止該爬蟲訪問。也就是不會返回給爬蟲任何信息,有的會返回提示:您當前屬于非法訪問!!

    那網站服務器它怎么知道我們是爬蟲呢?判斷方式有很多,其中比較常見的就是通過請求頭來判斷。

    在發(fā)送HTTP請求的時候瀏覽器都會帶上請求頭信息等,(程序發(fā)的時候默認不帶的)如果我們的程序沒有帶上,或者帶上的請求頭信息是錯誤的,也就是不被服務器認可的,那么就會遭到服務器的拒絕。
    請求頭的驗證也是最簡單的反爬蟲策略了

    添加請求頭

    我們的應對方案就是盡可能的模擬瀏覽器的功能或者行為。既然瀏覽器有請求頭的發(fā)送,那么我們的程序自然也應該加上。在Requests中我們通過headers參數(shù)添加請求頭信息

    imports requests url='' headers={ 'User-Agent':' ' } e=requests.get(url,headers=headers)

    POST請求主要用來提交表單數(shù)據(jù),然后服務器根據(jù)表單數(shù)據(jù)進行分析,再決定返回什么樣的數(shù)據(jù)給客戶端

    Form表單提交數(shù)據(jù)

    在Requests中發(fā)生POST請求也是比較容易的操作,要實現(xiàn)這個,只需簡單地傳遞一個字典給data參數(shù),你的數(shù)據(jù)字典在發(fā)出請求時會自動編碼為表單形式:

    payload={‘key1’:‘value1’,‘key2’:‘value2’}
    r=requests.post{’’,data=payload}
    當然Request中的post方法只是相對于get方法多了一個data參數(shù),其他參數(shù)都是相似的,例如我們也可以為post中的網址添加查詢字符串params參數(shù),也可以像get方法一樣添加headers參數(shù)等。

    POST傳遞數(shù)據(jù)

    Content-Type是傳遞數(shù)據(jù)的類型
    1.Content-Type:application/x-www-form-urlencoded(Form形式)表單形式Form
    傳遞數(shù)據(jù)的時候使用data參數(shù),接受一個字典

    2.Content-Type:application/json(json格式傳遞數(shù)據(jù))
    傳遞數(shù)據(jù)時候采用json參數(shù),接受一個字典
    也可以采用data=json.dumps()轉化一下格式(將字典轉換成字符串)

    響應狀態(tài)碼

    響應狀態(tài)碼可以很方便的查看我們的響應狀態(tài),我們可以檢測響應狀態(tài)碼:
    r=requests.get(‘https://httpbin.org/get’)
    r.status_code
    如果發(fā)送了一個錯誤請求(一個4XX 客戶端錯誤,或者5XX 服務器錯誤響應),我們可以通過
    response.raise_for_status()來拋出異常:
    r=requests.get(‘https://httpbin.org/status/404’)
    r.status_code #404
    r.raise_for_status() #拋出異常
    #異常錯誤
    Traceback(most recent call last):
    File “requests/models.py”,line 832,in raise_for_status
    raise http_errorrequests.exceptions.HTTPError:404 Client Error

    如果例子中r 的status_code是200,當我們調用raise_for_status()時,得到的是:

    r.raise_for_status() #200
    None

    查看狀態(tài)碼 r.status_code 200 常用來判斷,請求是否成功

    響應頭

    我們可以查看以一個Python字典形式展示服務器的響應頭

    r.headers
    #結果是
    {‘content-encoding’:‘gzip’,‘transfer-encoding’:‘chunked’,‘connection’:‘close’}
    但是這個字典比較特殊?:它是僅為HTTP頭而生的,根據(jù)RFC2616(HTTP1.1協(xié)議),HTTP頭部是大小寫不敏感的

    因此,我們可以使用任意大寫形式來訪問這些響應頭字段:
    r.headers[‘Content-Type’]#‘application/json’
    r.headers.get(‘Content-Type’)#‘application/json’

    響應頭 r.headers 返回響應頭信息 是個字典格式 可以用字典的方式訪問

    Cookie

    現(xiàn)在的網站中有這樣的一種網站類型,也就是需要用戶注冊以后,并且登陸才能訪問的網站,或者說在不登錄的情況下不能訪問自己的私有數(shù)據(jù),例如微博,微信等等

    網站記錄用戶信息的方式就是通過客戶端的Cookie值,例如:當我們在瀏覽器中保存賬號和密碼的同時,瀏覽器在我們的電腦上保存了我們的用戶信息,并且在下次訪問這個頁面的時候會自動為我們加載cookie信息

    在需要登錄的網站中,瀏覽器將cookie中的信息發(fā)送出去,服務器驗證cookie信息,確認登錄。既然瀏覽器在發(fā)送請求的時候帶有cookie信息,那么我們的程序同樣也要攜帶cookie信息

    cookie是當你訪問某個站點或者特定頁面的時候,留存在電腦里面的一段文本,它用于跟蹤記錄網站訪問者的相關數(shù)據(jù)信息,比如,搜索偏好,行為點擊,賬號,密碼等內容

    通常cookie值信息可以在瀏覽器中復制過來,放在headers中

    headers={
    ‘Accept’:‘application/json,text/javascript,/;q=0.01’,
    ‘Accept-Encoding’:‘gzip,deflate,br’,
    ‘Connection’:‘keep-alive’
    ‘Cookie’:‘xxxxxxxxxxxxxxxxxxxxxx’ #瀏覽器中復制
    …………………………
    }
    這樣就可以隨著請求頭一起發(fā)出去了,當然requests也提供了cookies參數(shù),供我們提交cookie信息:

    import requests url=xxx cookies={'Cookie':'你的cookie值'} r=request.get(url,cookies=cookies)

    B站訪問案列

    import requests url='https://account.bilibili.com/home/userInfo' r=requests.get(url) print(r.json())

    重定向與請求歷史

    重定向

    重定向就是通過各種方法將一個網絡請求重新定個方向轉到其它位置??赡茉蚴怯行┚W址現(xiàn)在已經廢棄不準備再使用等

    處理重定向

    默認情況下,對于我們常用的GET和POST請求等,Requests會自動處理所有重定向。例如Github把所有的HTTP請求重定向到HTTPS:

    r=requests.get('http://github.com') r.url #'https://github.com' r.status_code #200

    如果你使用的是GET和POST等,那么你可以通過allow_redirects參數(shù)禁用重定向處理:

    r=requests.get('http://github.com',allow_redirects=Flase) r.status_code #301

    可以使用響應對象的history方法來追蹤重定向。response.history是一個Response對象的列表,為了完成請求而創(chuàng)建了這些對象,這個對象列表按照從最老到最近的請求進行排序

    r=requests.get('http://github.com') r.history #[<Response[301]>]

    超時

    有時候我們由于時間或者對方網站的原因,不想等待很長時間,等待響應的回傳,那么我們就可以加上一個時間超時參數(shù),如果超過我們設定的時間,響應還沒有返回,那么就不再等待。

    你可以告訴requests在講過以timeout參數(shù)設定的秒數(shù)時間之后停止等待響應。建議所有的生產代碼都應該使用這一參數(shù)

    requests.get((‘http://github.com’,timeout=0.001)

    錯誤與異常

    遇到網絡問題(如:DNS查詢失敗,拒絕連接等)時,Requests會拋出一個ConnectionError異常
    1.如果HTTP請求返回了不成功的狀態(tài)碼,Response.raise_for_status()會拋出一個HTTPError異常
    2.若請求超時,則拋出一個Timeout異常
    3.若請求超過了設定的最大重定的次數(shù),則會拋出一個TooManyRedirects異常

    所有Requests顯式拋出的異常繼承自requests.exceptions.RequestException

    字符是各種文字和符號的總稱,包括各國家文字,標點符號,圖形符號,數(shù)字等。字符集是多個字符的集合
    字符集包括:ASCII字符集,GB2313字符集,GB18030字符集,Unicode字符集等
    ASCII編碼是1個字節(jié),而Unicode編碼通常是2個字節(jié)

    User-Agent:
    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400

    XP對應的是Windows NT 5.1
    Windows 7對應的是Windows NT 6.1
    Windows 8對應的是Windows NT 6.3

    GET請求是指從服務器請求獲得數(shù)據(jù)

    User-Agent:
    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400

    修改headers

    通過Request的headers參數(shù)修改

    import requests url='https://www.baidu.com/' heads={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400'} e=requests.get(url,headers=heads) print(e.status_code)

    import json import urllib.request import urllib.parse url='https://www.baidu.com/' heads={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400'} e=urllib.request.Request(url,heads)print(e)

    通過request.add_header()方法修改

    import json import urllib.request import urllib.parse url='https://www.baidu.com/' heads={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400'} e=urllib.request.Request(url) e.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3866.400 QQBrowser/10.8.4379.400') print(e)

    總結

    以上是生活随笔為你收集整理的Request模块基本常识的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 爱爱免费视频网站 | 日韩理论片在线观看 | 免费的毛片网站 | 91成人高清 | 在线观看www.| 四虎久久 | 激情内射亚洲一区二区三区爱妻 | 国产午夜麻豆影院在线观看 | 日韩av色图 | 91精品啪在线观看国产线免费 | 91玉足脚交嫩脚丫在线播放 | 亚洲精品久久久久久久久久 | 国产极品久久久 | 嫩草研究院在线观看 | 国产在线播放网站 | 91av视频在线免费观看 | 日韩精品在线不卡 | 小泽玛利亚一区二区三区视频 | 国产一区二区三区四区五区美女 | 一区免费在线 | 欧美极品一区二区三区 | 日韩av在线看免费观看 | 夜夜操夜夜操 | 午夜视频在线免费播放 | av观看在线免费 | 日本wwww视频 | 高清国产一区二区三区四区五区 | 激情宗合 | 国产一区黄色 | 女性裸体下面张开 | 国产精品成人免费一区久久羞羞 | 成人性生活毛片 | 91看大片 | 亚洲av综合永久无码精品天堂 | 可以在线看黄的网站 | 国产白丝av | 亚洲视频免费看 | 久久久久国产免费 | 青青导航 | 美国美女黄色片 | 天天摸天天做天天爽水多 | 热久久久| 亚洲乱码一区二区 | 永久av| 欧美视频在线观看免费 | 国产乱强伦一区二区三区 | 中文久久乱码一区二区 | 久久精品亚洲a | 欧美成人r级一区二区三区 中文无码一区二区三区在线观看 | 亚洲男人的天堂网站 | 三级欧美韩日大片在线看 | 亚色91 | avtt久久 | 亚洲xxx视频| 精品一区二区三区入口 | 男女视频一区二区 | 在线cao | jizz日本大全| 黄片毛片一级 | 亚洲一级黄色片 | 中文字幕亚洲乱码熟女一区二区 | 91日韩精品 | 欧美日韩六区 | 日本视频在线免费观看 | 有色影院 | 亚洲精品国产精品国自产网站 | 天天久久久 | 这里只有精品免费视频 | 国产sm主人调教女m视频 | 激情五月色播五月 | 正在播放木下凛凛xv99 | 一区免费在线观看 | 91网站免费入口 | 激情国产一区 | 国产亚洲精品久久久久婷婷瑜伽 | 亚洲熟妇无码av在线播放 | 国产伦精品一区二区三区视频我 | 五月激情小说网 | 成人在线免费播放视频 | 国产视频污在线观看 | 一区二区在线免费视频 | 中国特级黄色片 | 福利一区三区 | 婷婷色中文字幕 | 一区二区欧美视频 | 在线观看日韩av | 久久99精品国产麻豆婷婷洗澡 | 黄色小视频免费看 | 日韩欧美日本 | 九色自拍 | 在线观看污污视频 | 欧美精品黄| 天天做天天爱夜夜爽 | 中文字幕日韩一区 | 女儿的朋友4在线观看 | 制服av网 | 2022精品国偷自产免费观看 | 神马久久影院 | 国产麻豆一区二区三区在线观看 |