如何使用 Python 請求網路資源

WBOY
發布: 2023-04-13 12:22:05
轉載
1865 人瀏覽過

如何使用 Python 請求網路資源

很久以來我們都在分享Linux 系統相關的知識,所以可能會有朋友誤以為我們只分享Linux 操作相關的東西,其實不是啊,我們在平時開發過程中遇到的一些問題,感覺可以總結的,都有可能拿來分享。

最近在寫一個定時訪問網絡資源的程序,裡面涉及到使用 python 訪問網絡,所以我們今天就對這一個點做一個簡短的總結。

使用 python 存取網路資源

要存取網路中的資源,有些朋友可能會使用 urllib.request,這個模組也是一個 python 的標準函式庫。不過我們使用的是 requests,它是 urllib.request 的封裝,使用起來比較方便。如果是第一次使用的話,需要安裝requests,我們使用pip 安裝:

pip install --user requests
登入後複製

安裝成功後,就可以直接使用了,使用的時候,需要在python 檔案的上方引入:

import requestsimport requests
登入後複製

為了方便演示,我們使用requests 模組訪問一下github 上星最高的python 項目,地址為:

https://www.php.cn/link/62d90d223cf3e2239113a4963b191d71

為了有一個整體的認識,大家可以先用瀏覽器打開這個地址,看看裡面的內容,它是一個以json 格式展現的文本。

然後我們新建一個test-resp.py 的文件,裡面輸入如下程式碼:

import requests
url='​​https://www.php.cn/link/62d90d223cf3e2239113a4963b191d71​​';
get_resp=requests.get(url);
登入後複製

上述程式碼中第1 行為引入requests 模組,第2 行將待存取位址儲存到url 變數中,第3 行使用requests 模組的get 方法來存取這個url,並將回應儲存在變數get_resp 中。這個回應是一個對象,包含請求資源的內容和狀態。可以列印這個回應的狀態,使用status_code 對象,如下程式碼:

print(get_resp.status_code)
登入後複製

結果如下:

$ python ​​test-resp.py​​
200
登入後複製

當然,也可以列印出回應的文本,即列印get_resp.text,不過這個文字沒有格式化,不易讀,如下圖:

上圖我們只截取了結果的一部分,因為太長了...這個結果解析起來是比較麻煩的,不過完全不用擔心,簡單看一下其內容我們就可以注意到,其內容是一個json格式的,所以響  應結果也是一個json,而python 對json 的解析功能是很強大的,如下我們可以打印出這個json 的key 值:

print(get_resp.json().keys())
登入後複製

結果如下:

$ python ​​test-resp.py​​
dict_keys(['total_count', 'incomplete_results', 'items'])
登入後複製

由上結果可以知道,我們完全可以將這個回應結果當作一個json 物件來處理。例如,上述結果中的第一個keyi 值total_count,其表示python 倉庫的總數,我們可以將這個數值列印出來,如下所示:

response_dict=get_resp.json();
print("Total repositories:", response_dict['total_count'])
登入後複製

其運行結果如下:

$ python ​​test-resp.py​​
Total repositories: 9128125
登入後複製

如果讀取的網路資源,是普通的html 格式,可以使用一個第三方函式庫BeautifulSoup,可以完美解決html 解析。關於BeautifulSoup我們在之前的文章中也介紹過,大家可以參考:使用Python 的Beautiful Soup 庫來分析網頁

添加請求頭資訊

##有些網路資源對於請求的回應可能會做了限制,例如阻止機器人(程式)訪問,或者需要登入(有用戶會話)才能訪問,為此,可以在請求中添加請求頭,在請求頭中模擬瀏覽器,添加用戶會話資訊(token)等。如下所示:

headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
'Authorization':'41d15146-c3f3-4c0b-b48b-b5210151a9df'
}
get_resp=requests.get(url,headers=headers,params=None)
登入後複製

上述程式碼中,headers 物件中的 User-Agent 為模擬的瀏覽器訊息,Authorization 為請求令牌。也可以按需添加其他請求頭信息,如下所示:

header={
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'
}
登入後複製

其他

上面我們使用的例子,都是處理的get 請求,對於post 請求也同樣適用,使用requests的post 方法,如下:

post_resp=requests.post(url,headers=headers,data=None,json=None)
登入後複製
使用方法與get 請求完全相同。

以上就是我們這次分享全部內容,歡迎討論。

以上是如何使用 Python 請求網路資源的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!