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

