Python使用urllib和requests發(fā)送HTTP請(qǐng)求的方法詳解
本文介紹了Python中發(fā)送HTTP請(qǐng)求的兩種方法:內(nèi)置的urllib庫(kù)和第三方requests庫(kù)。urllib提供基礎(chǔ)功能,而requests庫(kù)更簡(jiǎn)單強(qiáng)大,支持GET/POST請(qǐng)求、參數(shù)傳遞、請(qǐng)求頭設(shè)置等功能。
本文通過(guò)天氣API示例演示了實(shí)際應(yīng)用,并提供了超時(shí)設(shè)置、錯(cuò)誤處理和JSON解析等實(shí)用技巧。推薦大多數(shù)場(chǎng)景使用requests庫(kù),同時(shí)強(qiáng)調(diào)了異常處理的重要性。這些方法為獲取網(wǎng)絡(luò)數(shù)據(jù)和與Web服務(wù)交互提供了基礎(chǔ)工具。
想象一下,你想要從網(wǎng)上獲取一些信息——比如今天的天氣、最新的新聞或者一張圖片。這就像給網(wǎng)站寫一封信,然后等待回信。Python就是你的貼心郵差,幫你輕松完成這個(gè)收發(fā)過(guò)程。
最簡(jiǎn)單的方式:使用urllib(Python內(nèi)置)
Python自帶了一個(gè)叫urllib的庫(kù),就像你手機(jī)里自帶的短信應(yīng)用,不需要額外安裝。
import urllib.request
# 發(fā)送一個(gè)簡(jiǎn)單的GET請(qǐng)求
response = urllib.request.urlopen('https://www.example.com')
print(response.read().decode('utf-8')) # 讀取并解碼響應(yīng)內(nèi)容
推薦方式:使用requests庫(kù)(更簡(jiǎn)單強(qiáng)大)
雖然Python自帶工具,但requests庫(kù)就像一款智能郵件應(yīng)用,讓一切變得更加簡(jiǎn)單直觀。
第一步:安裝requests
pip install requests
第二步:發(fā)送各種類型的請(qǐng)求
import requests
# 1. 簡(jiǎn)單的GET請(qǐng)求(獲取信息)
response = requests.get('https://api.github.com')
print(f"狀態(tài)碼: {response.status_code}") # 200表示成功
print(response.text) # 獲取網(wǎng)頁(yè)內(nèi)容
# 2. 帶參數(shù)的GET請(qǐng)求(像在搜索框里輸入內(nèi)容)
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url) # 查看實(shí)際請(qǐng)求的URL
# 3. POST請(qǐng)求(提交信息,像填寫表單)
data = {'username': 'user', 'password': 'pass'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json()) # 以JSON格式查看響應(yīng)
# 4. 自定義請(qǐng)求頭(像添加特別說(shuō)明)
headers = {'User-Agent': 'My-Python-App/1.0'}
response = requests.get('https://httpbin.org/user-agent', headers=headers)
print(response.text)
實(shí)際應(yīng)用示例:獲取天氣信息
import requests
def get_weather(city):
# 使用一個(gè)免費(fèi)的天氣API(實(shí)際使用需要申請(qǐng)API密鑰)
api_key = "你的API密鑰"
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
try:
response = requests.get(url, timeout=5) # 5秒超時(shí)
response.raise_for_status() # 如果請(qǐng)求失敗會(huì)拋出異常
weather_data = response.json()
print(f"{city}的天氣: {weather_data['weather'][0]['description']}")
print(f"溫度: {weather_data['main']['temp']}K")
except requests.exceptions.RequestException as e:
print(f"獲取天氣信息失敗: {e}")
# 使用函數(shù)
get_weather('Beijing')
小貼士和注意事項(xiàng)
超時(shí)設(shè)置:總是設(shè)置合理的超時(shí)時(shí)間,避免程序卡死
requests.get(url, timeout=5)
錯(cuò)誤處理:使用try-except塊捕獲可能的異常
try:
response = requests.get(url)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"請(qǐng)求出錯(cuò): {e}")
JSON處理:現(xiàn)代API大多返回JSON格式,requests可以直接解析
data = response.json()
總結(jié)
- 簡(jiǎn)單需求:使用Python內(nèi)置的urllib
- 大多數(shù)情況:使用requests庫(kù),它更簡(jiǎn)單、更強(qiáng)大
- 記住設(shè)置超時(shí)和處理異常
- 現(xiàn)代Web API大多使用JSON格式,requests可以輕松處理
現(xiàn)在你已經(jīng)掌握了用Python發(fā)送HTTP請(qǐng)求的基本方法!就像學(xué)會(huì)了寫電子郵件一樣,你可以開始探索互聯(lián)網(wǎng)上的各種數(shù)據(jù)和服務(wù)了。
到此這篇關(guān)于Python使用urllib和requests發(fā)送HTTP請(qǐng)求的方法詳解的文章就介紹到這了,更多相關(guān)Python發(fā)送HTTP請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyQt5多線程實(shí)現(xiàn)UI不卡頓的解決方案
在PyQt5中,為了避免長(zhǎng)時(shí)間的操作阻塞UI界面(導(dǎo)致界面卡死),我們可以使用多線程,通常,我們將耗時(shí)的任務(wù)放在一個(gè)單獨(dú)的線程中運(yùn)行,,并通過(guò)信號(hào)與槽機(jī)制與UI線程進(jìn)行通信,以更新界面,下面是一個(gè)示例,演示了如何在更新UI的同時(shí)進(jìn)行多線程操作,確保UI界面不會(huì)卡死2026-01-01
Python中for循環(huán)控制語(yǔ)句用法實(shí)例
這篇文章主要介紹了Python中for循環(huán)控制語(yǔ)句用法,較為詳細(xì)的分析了for循環(huán)語(yǔ)句的原理與相關(guān)使用技巧,需要的朋友可以參考下2015-06-06
小白教你PyCharm從下載到安裝再到科學(xué)使用PyCharm2020最新激活碼
這篇文章主要介紹了PyCharm最新版從下載到安裝再到科學(xué)使用PyCharm2020最新激活碼,需要的朋友可以參考下2020-09-09
Python對(duì)列表進(jìn)行排序的五種方法舉例
這篇文章主要介紹了Python對(duì)列表進(jìn)行排序的五種方法,文中包括sort()方法、sorted()函數(shù)、lambda表達(dá)式、operator模塊和numpy模塊,幫助開發(fā)者根據(jù)具體需求選擇合適的排序方式,需要的朋友可以參考下2024-11-11
python re的findall和finditer的區(qū)別詳解
這篇文章主要介紹了python re的findall和finditer的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
解決Python pandas df 寫入excel 出現(xiàn)的問(wèn)題
今天小編就為大家分享一篇解決Python pandas df 寫入excel 出現(xiàn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Anaconda3中的Jupyter notebook添加目錄插件的實(shí)現(xiàn)
這篇文章主要介紹了Anaconda3中的Jupyter notebook添加目錄插件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

