Python中網(wǎng)絡(luò)請(qǐng)求的12種方式
1. 使用requests模塊的基礎(chǔ)請(qǐng)求
import requests;
response = requests.get('https://api.example.com/data')這是最基本的網(wǎng)絡(luò)請(qǐng)求,用requests.get()函數(shù)向指定URL發(fā)送GET請(qǐng)求,response里裝的就是響應(yīng)數(shù)據(jù)。
2. GET請(qǐng)求帶參數(shù)
params = {'key': 'value'};
response = requests.get('https://example.com/search', params=params)通過(guò)字典params傳遞查詢參數(shù),簡(jiǎn)單又高效。
3. POST請(qǐng)求發(fā)送數(shù)據(jù)
data = {'username': 'learner'};
response = requests.post('https://example.com/login', data=data)POST請(qǐng)求常用于提交數(shù)據(jù),比如登錄表單,這里用data字典攜帶你的信息。
4. 設(shè)置請(qǐng)求頭
headers = {'User-Agent': 'MyBot/0.1'};
response = requests.get('https://example.com', headers=headers)模擬瀏覽器或添加特定的請(qǐng)求頭,有時(shí)候是訪問(wèn)某些網(wǎng)站的關(guān)鍵。
5. 處理JSON響應(yīng)
response = requests.get('https://api.example.com/data');
print(response.json())直接用.json()方法解析JSON格式的響應(yīng),方便快捷。
6. 下載文件
with open('image.jpg', 'wb')
as f: f.write(requests.get('https://example.com/image.jpg', stream=True).content)流式下載大文件,避免內(nèi)存爆棚,記得以二進(jìn)制模式打開(kāi)文件哦。
7. 超時(shí)設(shè)置
response = requests.get('https://slow.example.com', timeout=3)耐心有限,3秒內(nèi)沒(méi)響應(yīng)就放棄,避免程序掛起。
8. 使用代理
proxies = {'http': 'http://proxy.example.com:8080', 'https': 'https://proxy.example.com:8080'}; response = requests.get('https://example.com', proxies=proxies)當(dāng)你需要通過(guò)代理服務(wù)器訪問(wèn)時(shí),這個(gè)技巧很實(shí)用。
9. 自動(dòng)處理重定向
response = requests.get('https://redirect-me.example.com', allow_redirects=False)默認(rèn)情況下會(huì)自動(dòng)重定向,加allow_redirects=False可以控制是否跟隨重定向。
10. 發(fā)送認(rèn)證信息
response = requests.get('https://protected.example.com', auth=('user', 'pass'))問(wèn)需要認(rèn)證的頁(yè)面,用戶名密碼一提交,輕松搞定。
11. 會(huì)話管理(保持Cookie)
with requests.Session() as s:
s.get('https://login.example.com')
response = s.get('https://profile.example.com')使用Session對(duì)象,可以維持登錄狀態(tài),訪問(wèn)受限資源。
12. 錯(cuò)誤處理
try:
response = requests.get('https://never.exists.com')
except requests.exceptions.RequestException as e:
print(e)優(yōu)雅地處理請(qǐng)求過(guò)程中可能遇到的錯(cuò)誤,讓你的程序更加健壯。
實(shí)戰(zhàn)案例:網(wǎng)頁(yè)內(nèi)容抓取
想象一下,你想從一個(gè)博客網(wǎng)站上抓取最新的文章標(biāo)題。假設(shè)這個(gè)網(wǎng)站的每篇文章鏈接都在一個(gè)類(lèi)名為'article-title'的HTML元素中。你可以這樣做:
from bs4 import BeautifulSoup; import requests url = 'https://example-blog.com/latest' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') titles = [title.text for title in soup.find_all(class_='article-title')] print(titles)
這段代碼首先發(fā)送GET請(qǐng)求獲取網(wǎng)頁(yè)內(nèi)容,然后使用BeautifulSoup解析HTML,最后通過(guò)列表推導(dǎo)式提取所有文章標(biāo)題。這就是一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲(chóng)雛形。
練習(xí)技巧與方法提示
分步調(diào)試:在復(fù)雜的請(qǐng)求邏輯中,分步執(zhí)行并打印中間結(jié)果,有助于理解流程。
**使用
requests.Session**:在頻繁請(qǐng)求同一站點(diǎn)時(shí),使用Session可以提高效率,減少握手時(shí)間。錯(cuò)誤日志:記錄請(qǐng)求過(guò)程中的錯(cuò)誤,有助于排查問(wèn)題。可以使用Python的logging模塊。
注意事項(xiàng)
遵守Robots協(xié)議(robots.txt):尊重網(wǎng)站規(guī)則,不爬取禁止抓取的內(nèi)容。
請(qǐng)求頻率:合理控制請(qǐng)求間隔,避免對(duì)目標(biāo)網(wǎng)站造成過(guò)大壓力,可能導(dǎo)致IP被封禁。
數(shù)據(jù)處理:獲取的數(shù)據(jù)可能需要清洗和格式化,確保數(shù)據(jù)質(zhì)量。
安全性:在處理HTTP請(qǐng)求時(shí),注意SSL證書(shū)驗(yàn)證,防止中間人攻擊。
高級(jí)技巧:異步請(qǐng)求
隨著Python的asyncio庫(kù)的普及,異步請(qǐng)求成為提高效率的新方式。雖然不是“一行代碼”,但了解其重要性是必要的。
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'https://example.com')
print(html)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())這段代碼展示了如何使用aiohttp庫(kù)進(jìn)行異步HTTP請(qǐng)求,大幅提升了并發(fā)請(qǐng)求的能力,適用于大量請(qǐng)求的場(chǎng)景。
以上就是Python中網(wǎng)絡(luò)請(qǐng)求的12種方式的詳細(xì)內(nèi)容,更多關(guān)于Python網(wǎng)絡(luò)請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python版本管理器之Pyenv-win介紹與安裝方法詳解
pyenv-win是pyenv的Windows版本,是一個(gè)Python版本管理工具,使用戶可以輕松在多個(gè)版本之間切換,這篇文章主要介紹了Python版本管理器之Pyenv-win介紹與安裝方法的相關(guān)資料,需要的朋友可以參考下2025-04-04
Python處理MySQL與SQLite數(shù)據(jù)庫(kù)詳解
在數(shù)據(jù)處理和存儲(chǔ)方面,數(shù)據(jù)庫(kù)扮演著至關(guān)重要的角色,Python提供了多種與數(shù)據(jù)庫(kù)交互的方式,本文主要介紹了如何對(duì)MySQL與SQLite數(shù)據(jù)庫(kù)進(jìn)行增刪改查操作,需要的可以了解下2025-02-02
python實(shí)現(xiàn)一個(gè)圍棋小游戲
今天給大家?guī)?lái)一期圍棋的源碼分享。下面我們先看看效果。游戲進(jìn)去默認(rèn)為九路玩法,當(dāng)然也可以選擇十三路或是十九路玩法,感興趣的可以了解一下2022-11-11
Python爬蟲(chóng)設(shè)置Cookie解決網(wǎng)站攔截并爬取螞蟻短租的問(wèn)題
這篇文章主要介紹了Python爬蟲(chóng)設(shè)置Cookie解決網(wǎng)站攔截并爬取螞蟻短租,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
tensorflow之tf.record實(shí)現(xiàn)存浮點(diǎn)數(shù)數(shù)組
今天小編就為大家分享一篇tensorflow之tf.record實(shí)現(xiàn)存浮點(diǎn)數(shù)數(shù)組,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
在VS?Code中使用Black格式化Python代碼詳細(xì)說(shuō)明
格式化使源代碼更容易被人類(lèi)閱讀,下面這篇文章主要介紹了在VS?Code中使用Black格式化Python代碼的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-03-03
NCCL深度學(xué)習(xí)之初始化及ncclUniqueId的產(chǎn)生源碼解析
這篇文章主要為大家介紹了NCCL源碼解析之初始化及ncclUniqueId的產(chǎn)生詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
使用Python將PowerPoint轉(zhuǎn)換為Word文檔的示例代碼
在日常工作中,我們經(jīng)常需要將 PowerPoint 演示文稿內(nèi)容轉(zhuǎn)換為 Word 文檔,本文將介紹如何使用 Free Spire.Presentation for Python 和 Free Spire.PDF for Python,通過(guò) Python 自動(dòng)完成 PowerPoint 到 Word 的轉(zhuǎn)換,并確保排版盡量保留,需要的朋友可以參考下2025-11-11

