最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?Requests?基本使用及Requests與?urllib?區(qū)別

 更新時間:2022年11月18日 11:13:33   作者:卡爾特斯  
在使用Python爬蟲時,需要模擬發(fā)起網(wǎng)絡(luò)請求,主要用到的庫有requests庫和python內(nèi)置的urllib庫,一般建議使用requests,它是對urllib的再次封裝,今天通過本文給大家講解Python?Requests使用及urllib區(qū)別,感興趣的朋友一起看看吧

一、簡介

Python 內(nèi)置了 requests 模塊,該模塊主要用來發(fā)送 HTTP 請求,requests 模塊比 urllib 模塊更簡潔。

Requests 官方文檔、Requests 中文文檔

安裝

$ pip install requests

附:urllib 入門使用(步驟詳細(xì)) 用于對比區(qū)別。

二、基本使用

# 導(dǎo)入
import requests

# 請求地址
url = "https://www.baidu.com"

# 獲取服務(wù)器響應(yīng)數(shù)據(jù)
response = requests.get(url=url)

# 1 個類型和 6 個屬性

# 1、響應(yīng)數(shù)據(jù)類型(urllib 的響應(yīng)數(shù)據(jù)類型是 http.client.HTTPResponse)
print(type(response)) # requests.models.Response

# 2、設(shè)置響應(yīng)的編碼格式
response.encoding = 'utf-8'

# 3、以字符串的形式返回網(wǎng)頁的源碼
print(response.text)

# 4、返回 url 地址
print(response.url)

# 5、返回二進(jìn)制的數(shù)據(jù)(text 的二進(jìn)制數(shù)據(jù),urllib 的 response.read() 就是二進(jìn)制數(shù)據(jù))
print(response.content)

# 6、返回響應(yīng)的狀態(tài)碼
print(response.status_code)

# 7、返回響應(yīng)頭信息
print(response.headers)

三、GET 請求與 urllib 區(qū)別

# 導(dǎo)入
import requests

# 請求地址
# url = "https://www.baidu.com/s?"
url = "https://www.baidu.com/s"

# 請求頭
headers = {
  'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
  # 'Accept-Encoding': 'gzip, deflate, br',
  'Accept-Language': 'zh-CN,zh;q=0.9',
  'Connection': 'keep-alive',
  'Cookie': '填自己的 Cookie,沒有會拿不到數(shù)據(jù)',
  'Host': 'www.baidu.com',
  'Referer': 'https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC&rsv_spt=1&rsv_iqid=0xc4323e2d0000fc1a&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&rsv_dl=tb&oq=%25E5%258C%2597%25E4%25BA%25AC&rsv_btype=t&rsv_t=009fICC65EzpN%2BM16VRnKfYWv8Pm6F%2BO1r55ft99%2BL0OlRVHYYfi5cpRa1wOl%2Bhe0bQO&rsv_pq=f70437990000a294&prefixsug=%25E5%258C%2597%25E4%25BA%25AC&rsp=0',
  'sec-ch-ua': '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
  'sec-ch-ua-mobile': '?0',
  'sec-ch-ua-platform': '"macOS"',
  'Sec-Fetch-Dest': 'empty',
  'Sec-Fetch-Mode': 'cors',
  'Sec-Fetch-Site': 'same-origin',
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
  'X-Requested-With': 'XMLHttpRequest'
}

# 參數(shù)
data = {
  'wd': '北京'
}

# 獲取服務(wù)器響應(yīng)數(shù)據(jù)【def get(url, params=None, **kwargs)】
# url: 請求地址
# params: 參數(shù)
# kwargs: 字典
response = requests.get(url=url, params=data, headers=headers)

# 設(shè)置響應(yīng)數(shù)據(jù)編碼格式
response.encoding = 'utf-8'

# 獲取頁面內(nèi)容
print(response.text)

# 總結(jié):
# 1、參數(shù)使用 params 傳遞
# 2、無需像 urllib 使用 urllib.parse.urlencode() 編碼,可以直接傳入
# 3、不需要請求對象的定制
# 4、請求資源路徑中的 ?可以加也可以不加
  # url = "https://www.baidu.com/s?"
  # url = "https://www.baidu.com/s"

四、POST 請求與 urllib 區(qū)別

# 導(dǎo)入
import requests

# 請求地址
url = "https://fanyi.baidu.com/sug"

# 請求頭
headers = {
  'Accept': 'application/json, text/javascript, */*; q=0.01',
  'Accept-Encoding': 'gzip, deflate, br',
  'Accept-Language': 'zh-CN,zh;q=0.9',
  'Connection': 'keep-alive',
  'Content-Length': '21',
  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
  'Cookie': '填自己的 Cookie,沒有會拿不到數(shù)據(jù)',
  'Host': 'fanyi.baidu.com',
  'Origin': 'https://fanyi.baidu.com',
  'Referer': 'https://fanyi.baidu.com/',
  'sec-ch-ua': '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
  'sec-ch-ua-mobile': '?0',
  'sec-ch-ua-platform': '"macOS"',
  'Sec-Fetch-Dest': 'empty',
  'Sec-Fetch-Mode': 'cors',
  'Sec-Fetch-Site': 'same-origin',
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
  'X-Requested-With': 'XMLHttpRequest'
}

# 參數(shù)
data = {
  'kw': '眼睛'
}

# 獲取服務(wù)器響應(yīng)數(shù)據(jù)【def post(url, data=None, json=None, **kwargs)】
# url: 請求地址
# data: 參數(shù)
# kwargs: 字典
response = requests.post(url=url, data=data, headers=headers)

# 設(shè)置響應(yīng)數(shù)據(jù)編碼格式
response.encoding = 'utf-8'

# 獲取頁面內(nèi)容
print(response.text)

# 總結(jié):
# 1、post 請求不需要編解碼(urllib.parse.urlencode(params).encode('utf-8'))
# 2、post 請求的參數(shù)是 data,get 請求參數(shù)是 params
# 3、不需要請求對象的定制

五、IP代理

# 導(dǎo)入
import requests

# 請求地址
# url = "https://www.baidu.com/s?"
# url = "https://www.baidu.com/s"
url = "http://www.baidu.com/s"

# 請求頭
headers = {
  'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
  # 'Accept-Encoding': 'gzip, deflate, br',
  'Accept-Language': 'zh-CN,zh;q=0.9',
  'Connection': 'keep-alive',
  'Cookie': '填自己的 Cookie,沒有會拿不到數(shù)據(jù)',
  'Host': 'www.baidu.com',
  'Referer': 'https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC&rsv_spt=1&rsv_iqid=0xc4323e2d0000fc1a&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&rsv_dl=tb&oq=%25E5%258C%2597%25E4%25BA%25AC&rsv_btype=t&rsv_t=009fICC65EzpN%2BM16VRnKfYWv8Pm6F%2BO1r55ft99%2BL0OlRVHYYfi5cpRa1wOl%2Bhe0bQO&rsv_pq=f70437990000a294&prefixsug=%25E5%258C%2597%25E4%25BA%25AC&rsp=0',
  'sec-ch-ua': '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
  'sec-ch-ua-mobile': '?0',
  'sec-ch-ua-platform': '"macOS"',
  'Sec-Fetch-Dest': 'empty',
  'Sec-Fetch-Mode': 'cors',
  'Sec-Fetch-Site': 'same-origin',
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
  'X-Requested-With': 'XMLHttpRequest'
}

# 參數(shù)
data = {
  'wd': 'ip'
}

# 代理
proxys = {
  # 前面的 http 協(xié)議最好跟 請求地址 的協(xié)議保持一致,有時候會出問題
  # 'http': '222.74.73.202:42055'
}

# 獲取服務(wù)器響應(yīng)數(shù)據(jù)【def get(url, params=None, **kwargs)】
# url: 請求地址
# params: 參數(shù)
# kwargs: 字典
response = requests.get(url=url, params=data, headers=headers, proxies=proxys)

# 設(shè)置響應(yīng)數(shù)據(jù)編碼格式
response.encoding = 'utf-8'

# 獲取頁面內(nèi)容
# print(response.text)

# 存儲到文件夾
with open('dali.html', 'w', encoding='utf-8') as f:
  f.write(response.text)

六、驗證碼案例

通過 古詩文網(wǎng) 作為測試

# 登錄接口需要的參數(shù):
# __VIEWSTATE: ySbbXPOgH0tbN+MZqd0YtuJiFM8uIhBDD9pK/q4dqPvGLwWIbW799+Hr7aDPNHZpg27Nxe259UePM3z1Rc2X89uauZJQEkkrcyVULG09iqo38jAnG6zaq5D6a2/ZhOx7HIPakzBHk5K6JRQ2kGMtIfN0Qjs=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: xxxx
# pwd: xxxx
# code: TJ83
# denglu: 登錄

# 觀察到 __VIEWSTATE 與 __VIEWSTATEGENERATOR 不知道如何獲取?
# 一般情況下,看不到的數(shù)據(jù),都是在頁面源碼中,弄一個不可見的元素賦值,所有可以進(jìn)入源碼中,搜索試試

# 導(dǎo)入
import requests
from lxml import etree

# 請求地址
url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'

# 請求頭
headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

# 獲取頁面數(shù)據(jù)
response = requests.get(url=url, headers=headers)

# 然后可以在內(nèi)容中搜搜 __VIEWSTATE 與 __VIEWSTATEGENERATOR,以免做了反扒
# print(response.text)

# 設(shè)置響應(yīng)數(shù)據(jù)編碼
response.encoding = 'utf-8'

# 解析服務(wù)器響應(yīng)數(shù)據(jù)
tree = etree.HTML(response.text)

# 獲取 __VIEWSTATE 值
VIEWSTATE = tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0]

# 獲取 __VIEWSTATEGENERATOR 值
VIEWSTATEGENERATOR = tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0]

# 獲取驗證碼
code = tree.xpath('//img[@id="imgCode"]/@src')[0]
code_url = 'https://so.gushiwen.cn' + code

# 將驗證碼圖片下載到本地,但是不能使用 urllib.request.urlretrieve() 去下載,下載就會導(dǎo)致切換驗證碼了,保存的也就變成舊的了
# 解決方法:requests 里面有個 session(),能夠跨請求地保持某些參數(shù),說白了,就是比如使用 session 成功的登錄了某個網(wǎng)站,則再次使用該 session 對象對該網(wǎng)站的其他網(wǎng)頁訪問時都會默認(rèn)使用該 session 之前使用的 cookie 等參數(shù)
session = requests.session()
# 獲取驗證碼內(nèi)容
response_code = session.get(code_url)
# 注意此時要使用二進(jìn)制數(shù)據(jù),因為要下載圖片
content_code = response_code.content
# 將二進(jìn)制數(shù)據(jù)寫入到文件(有時候會有延遲,反應(yīng)沒那么快,編輯器沒有出現(xiàn),可以直接進(jìn)入文件看看)
with open('code.jpg', 'wb') as f:
  f.write(content_code)

# 識別驗證碼的庫網(wǎng)上很多,搜搜

到此這篇關(guān)于Python Requests 基本使用(與 urllib 的區(qū)別)的文章就介紹到這了,更多相關(guān)Python Requests 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 中pyqt5 樹節(jié)點點擊實現(xiàn)多窗口切換問題

    python 中pyqt5 樹節(jié)點點擊實現(xiàn)多窗口切換問題

    這篇文章主要介紹了python 中pyqt5 樹節(jié)點點擊實現(xiàn)多窗口切換問題,文中給大家介紹了python pyqt5 點擊按鈕來打開另一個窗口的方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒借鑒價值,需要的朋友可以參考下
    2019-07-07
  • python使用sqlite3時游標(biāo)使用方法

    python使用sqlite3時游標(biāo)使用方法

    這篇文章主要為大家詳細(xì)介紹了python使用sqlite3時游標(biāo)的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 詳解python上傳文件和字符到PHP服務(wù)器

    詳解python上傳文件和字符到PHP服務(wù)器

    本篇內(nèi)容主要給大家介紹了在python中上傳字符或者文件到PHP服務(wù)器的相關(guān)實現(xiàn)代碼,如果你正好用得到,一起學(xué)習(xí)下。
    2017-11-11
  • Python中的Popen函數(shù)demo演示

    Python中的Popen函數(shù)demo演示

    在Python的subprocess模塊中,Popen函數(shù)用于創(chuàng)建子進(jìn)程并與之通信,相較于os.system(),Popen提供了更多靈活性,如可捕獲子進(jìn)程的標(biāo)準(zhǔn)輸出和錯誤,exe_path參數(shù)用于指定要執(zhí)行的文件或命令,本文給大家介紹Python中的Popen函數(shù),感興趣的朋友一起看看吧
    2024-09-09
  • 使用Python進(jìn)行大規(guī)模數(shù)據(jù)處理和分析

    使用Python進(jìn)行大規(guī)模數(shù)據(jù)處理和分析

    大規(guī)模數(shù)據(jù)處理和分析旨在從海量數(shù)據(jù)中提取有用的信息和見解,以支持決策制定和業(yè)務(wù)發(fā)展,Python憑借其豐富的生態(tài)系統(tǒng)和強(qiáng)大的庫,為處理和分析數(shù)據(jù)提供了豐富的工具和資源,在本文中,我們將深入探討如何利用Python進(jìn)行大規(guī)模數(shù)據(jù)處理和分析,需要的朋友可以參考下
    2024-05-05
  • 使用Python實現(xiàn)文本轉(zhuǎn)語音(TTS)并播放音頻

    使用Python實現(xiàn)文本轉(zhuǎn)語音(TTS)并播放音頻

    在開發(fā)涉及語音交互或需要語音提示的應(yīng)用時,文本轉(zhuǎn)語音(TTS)技術(shù)是一個非常實用的工具,下面我們來看看如何使用gTTS和playsound庫將文本轉(zhuǎn)換為語音并播放音頻文件吧
    2025-03-03
  • python繪制散點圖詳細(xì)步驟(從0到1必會)

    python繪制散點圖詳細(xì)步驟(從0到1必會)

    這篇文章主要介紹了如何使用Python繪制散點圖,包括導(dǎo)入包、準(zhǔn)備數(shù)據(jù)、繪制圖像、修飾圖像(添加標(biāo)題、坐標(biāo)軸標(biāo)簽、顏色圖例)以及整合所有代碼,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    今天小編就為大家分享一篇解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • IntelliJ 中配置 Anaconda的過程圖解

    IntelliJ 中配置 Anaconda的過程圖解

    這篇文章主要介紹了IntelliJ 中配置 Anaconda過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 使用python對多個txt文件中的數(shù)據(jù)進(jìn)行篩選的方法

    使用python對多個txt文件中的數(shù)據(jù)進(jìn)行篩選的方法

    今天小編就為大家分享一篇使用python對多個txt文件中的數(shù)據(jù)進(jìn)行篩選的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論

云霄县| 常德市| 青阳县| 东辽县| 无棣县| 油尖旺区| 株洲市| 白沙| 黄陵县| 和林格尔县| 民县| 新闻| 青铜峡市| 区。| 拉萨市| 留坝县| 沅江市| 房产| 明星| 舞阳县| 启东市| 汉阴县| 安新县| 赤水市| 德江县| 前郭尔| 平昌县| 小金县| 耒阳市| 延长县| 木里| 宜丰县| 新闻| 普陀区| 郓城县| 凌海市| 江津市| 渝北区| 永吉县| 全南县| 霍林郭勒市|