Python獲取網(wǎng)頁(yè)內(nèi)容的靠譜方法
方法 1: 使用 httpx 庫(kù)
httpx
是 requests
的一個(gè)替代庫(kù),支持異步請(qǐng)求,也有更好的 SSL 驗(yàn)證功能。httpx
默認(rèn)會(huì)進(jìn)行 SSL 證書(shū)驗(yàn)證,但可以在需要時(shí)進(jìn)行配置。
安裝 httpx
:
pip install httpx
使用示例:
import httpx url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html' # 創(chuàng)建一個(gè)客戶(hù)端對(duì)象 with httpx.Client() as client: response = client.get(url) print(response.text)
如果你遇到 SSL 錯(cuò)誤,可以通過(guò)調(diào)整 verify
參數(shù)來(lái)禁用 SSL 驗(yàn)證,盡管這仍然不推薦用于生產(chǎn)環(huán)境:
response = client.get(url, verify=False)
方法 2: 使用 urllib3 庫(kù)
urllib3
是 Python 的一個(gè)高級(jí) HTTP 客戶(hù)端,處理 SSL 的方式比 requests
更加底層,適合需要精細(xì)控制 SSL 配置的場(chǎng)景。你可以通過(guò) urllib3
來(lái)下載網(wǎng)頁(yè)并管理 SSL 設(shè)置。
安裝 urllib3
:
pip install urllib3
使用示例:
import urllib3 # 創(chuàng)建一個(gè) PoolManager,支持更細(xì)粒度的控制 http = urllib3.PoolManager() url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html' # 禁用 SSL 驗(yàn)證(如果不關(guān)心安全) response = http.request('GET', url, retries=3, timeout=5.0) print(response.data.decode('utf-8'))
如果你希望進(jìn)行更精細(xì)的 SSL 配置,可以直接使用 SSLContext 來(lái)設(shè)置證書(shū)驗(yàn)證。
方法 3: 使用 aiohttp (異步請(qǐng)求)
如果你需要進(jìn)行多個(gè)異步 HTTP 請(qǐng)求,aiohttp 是一個(gè)非常強(qiáng)大的異步 HTTP 客戶(hù)端庫(kù),支持協(xié)程,可以讓你以更高效的方式進(jìn)行網(wǎng)絡(luò)請(qǐng)求。它也有更好的 SSL 處理機(jī)制。
安裝 aiohttp:
pip install aiohttp
使用示例:
import aiohttp import asyncio async def fetch(url): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.text() url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html' # 異步運(yùn)行 html = asyncio.run(fetch(url)) print(html)
如果遇到 SSL 問(wèn)題,可以通過(guò) verify_ssl
參數(shù)來(lái)禁用 SSL 驗(yàn)證:
async with session.get(url, ssl=False) as response:
方法 4: 使用 pycurl 庫(kù)(更底層,支持更多配置)
pycurl
是 Python 對(duì) libcurl
的封裝,提供了更多的配置選項(xiàng),特別適合對(duì) SSL 證書(shū)和協(xié)議進(jìn)行精細(xì)控制。
安裝 pycurl
:
pip install pycurl
使用示例:
import pycurl from io import BytesIO url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html' # 創(chuàng)建一個(gè)緩沖區(qū)來(lái)接收響應(yīng) buffer = BytesIO() # 創(chuàng)建 cURL 對(duì)象 c = pycurl.Curl() c.setopt(c.URL, url) c.setopt(c.WRITEDATA, buffer) # 禁用 SSL 驗(yàn)證 c.setopt(c.SSL_VERIFYPEER, 0) # 不驗(yàn)證對(duì)方的證書(shū) c.setopt(c.SSL_VERIFYHOST, 0) # 不驗(yàn)證主機(jī) # 執(zhí)行請(qǐng)求 c.perform() # 獲取結(jié)果 response = buffer.getvalue().decode('utf-8') print(response)
方法 5: 使用 certifi 自定義證書(shū)路徑
如果 SSL 錯(cuò)誤是由于缺少根證書(shū),你可以通過(guò) certifi
來(lái)確保使用最新的證書(shū)鏈。 certifi
提供了 Mozilla 的證書(shū)集合,可以幫助你避免 SSL 錯(cuò)誤。
安裝 certifi
:
pip install certifi
然后你可以在請(qǐng)求中顯式地指定證書(shū)路徑,確保使用最新的根證書(shū)。
import requests import certifi url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html' response = requests.get(url, verify=certifi.where()) # 使用 certifi 的證書(shū)路徑 print(response.text)
總結(jié):
httpx
: 推薦用httpx
庫(kù)來(lái)替代requests
,它有更強(qiáng)的 SSL 處理和更高的靈活性。urllib3
: 提供更多底層控制,適合精細(xì)的 SSL 配置。aiohttp
: 異步請(qǐng)求,適合進(jìn)行并發(fā)下載操作。pycurl
: 如果你需要完全控制 HTTP 請(qǐng)求和 SSL 配置,pycurl
是非常強(qiáng)大的選擇。certifi
: 確保 SSL 證書(shū)驗(yàn)證使用最新的證書(shū)集。
這些方案都能夠在保證安全性的前提下處理 SSL 問(wèn)題。如果你遇到的主要問(wèn)題是 SSL 證書(shū)問(wèn)題,確保使用較新的證書(shū)鏈,并避免在生產(chǎn)環(huán)境中禁用 SSL 驗(yàn)證。
以上就是Python獲取網(wǎng)頁(yè)內(nèi)容的靠譜方法的詳細(xì)內(nèi)容,更多關(guān)于Python獲取網(wǎng)頁(yè)內(nèi)容的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用python實(shí)現(xiàn)希爾、計(jì)數(shù)、基數(shù)基礎(chǔ)排序的代碼
希爾排序是一個(gè)叫希爾的數(shù)學(xué)家提出的一種優(yōu)化版本的插入排序。這篇文章主要介紹了使用python實(shí)現(xiàn)希爾、計(jì)數(shù)、基數(shù)基礎(chǔ)排序,需要的朋友可以參考下2019-12-12python判斷設(shè)備是否聯(lián)網(wǎng)的方法
這篇文章主要為大家詳細(xì)介紹了python判斷設(shè)備是否聯(lián)網(wǎng)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06基于Python和MoviePy實(shí)現(xiàn)照片管理和視頻合成工具
在這篇博客中,我們將詳細(xì)剖析一個(gè)基于 Python 的圖形界面應(yīng)用程序,該程序使用 wxPython 構(gòu)建用戶(hù)界面,并結(jié)合 MoviePy、Pillow 和 OpenCV 等庫(kù)實(shí)現(xiàn)照片管理和視頻合成功能,通過(guò)對(duì)代碼的逐部分分析,需要的朋友可以參考下2025-04-04python中pygame針對(duì)游戲窗口的顯示方法實(shí)例分析(附源碼)
這篇文章主要介紹了python中pygame針對(duì)游戲窗口的顯示方法,以完整實(shí)例形式較為詳細(xì)的分析了pygame響應(yīng)鍵盤(pán)按鍵改變窗口顯示效果的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-11-11關(guān)于Python 多重繼承時(shí)metaclass conflict問(wèn)題解決與原理探究
這篇文章主要介紹了Python 多重繼承時(shí)metaclass conflict問(wèn)題解決與原理探究 ,需要的朋友可以參考下2022-10-10