如何使用 Python 請求網路資源
很長時間以來我們都在分享 系統相關的知識,所以可能會有朋友誤以為我們只分享 Linux 操作相關的東西,其實不是啊,我們在平時開發過程中遇到的一些問題,感覺可以總結的,都有可能拿來分享。最近在寫一個定時訪問網路資源的程式,裡面涉及到使用 python 訪問網路,所以我們今天就對這一個點做一個簡短的總結。
要訪問網路中的資源,有些朋友可能會使用 urllib.request,這個模組也是一個 python 的標準庫。不過我們使用的是 requests,它是 urllib.request 的封裝,使用起來更方便。 如果是第一次使用的話,需要安裝 requests,我們使用 pip 安裝:
pip install --user requests
安裝成功後,就可以直接使用了,使用的時候,需要在 python 檔案的上方引入:
import requestsimport requests
為了方便演示,我們使用 requests 模組訪問一下 github 上星最高的 python 專案,地址為:
為了有一個整體的認識,大家可以先使用瀏覽器開啟這個地址,看看裡面的內容,它是一個以 json 格式展現的文字。
然後我們新建一個 test-resp.py 的檔案,裡面輸入如下程式碼:
import requests url=''; 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 請求完全相同。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2919828/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 網路資料請求
- iOS 使用Moya網路請求iOS
- 使用retrofit進行網路請求
- swift 網路請求Alamofire的使用Swift
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- swift網路資料請求方法Swift
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- flutter網路請求框架dio基本使用Flutter框架
- 網路請求了
- 網路請求優化之取消請求優化
- Swift 3 網路請求+資料解析Swift
- iOS 網路請求資料快取iOS快取
- vue(24)網路請求模組axios使用VueiOS
- 使用Retrofit+RxJava實現網路請求RxJava
- okhttp網路請求框架的簡單使用HTTP框架
- [譯]使用 Siesta 處理 Swift 網路請求Swift
- HTTP網路請求原理HTTP
- iOS原生網路請求iOS
- 網路請求圖片
- 網路請求LCNetwork
- Python網路請求庫Requests,媽媽再也不會擔心我的網路請求了(一)Python
- python requests get請求 如何獲取所有請求Python
- Android okHttp網路請求之Get/Post請求AndroidHTTP
- 得物技術網路優化-CDN資源請求優化實踐優化
- Jest中Mock網路請求Mock
- OC:封裝網路請求封裝
- Android網路請求(2)Android
- RxJava + Retrofit完成網路請求RxJava
- iOS網路請求穿值iOS
- 網路請求框架對比框架
- Android Http請求框架二:xUtils 框架網路請求AndroidHTTP框架
- 如何使用 urllib 包獲取網路資源
- 使用Python獲取HTTP請求頭資料PythonHTTP
- 使用 http-proxy 對網路請求進行代理HTTP
- 分分鐘使用Retrofit+Rxjava實現網路請求RxJava
- Flutter 網路請求框架封裝Flutter框架封裝
- OKHttp網路請求原理流程解析HTTP