python設置超時時間
1. 怎麼設置python requests的超時時間
方法里有timeout參數,單位是秒:
requests.get(timeout=60)
如果解決了您的問題請採納!
如果未解決請繼續追問!
2. 全方面的掌握Requests庫的使用【python爬蟲入門進階】(02)
上一篇文章簡單的介紹了 爬蟲相關的基礎知識點,介紹了一個標准爬蟲程序的三個步驟 。這篇文章就讓我們接著來學習。
本文重點介紹requests庫的使用以及爬蟲協議。之前也寫了一篇 Requests庫使用的博客 ,有興趣的小夥伴可以去看看。
前面介紹了Requests庫是用來抓取網頁源碼,請求介面的利器,整體上是要比urllib庫的request更加好用的庫。官網上將其稱之為唯一一個非轉基因的Python HTTP庫,人類可以安全享用。
Requests庫有7個主要方法。
不過我們平常最常用的方法還是GET方法和POST方法。
get請求方法是爬蟲中最常用到的方法,因為爬蟲主要就是爬取網頁的信息。最基礎的使用是
這里需要通過 res.encoding='utf-8' 設置響應結果的編碼格式是utf-8。不然可能會出現中文亂碼
如果響應結果是二進制數據的話則需要通過 res.content 方法來提取響應結果。
設置編碼的方式也可以是 res.content.decode('utf-8') 。
即
有時候get請求也需要傳入參數,這里可以直接將參數拼接到URL上或者通過params參數傳入一個字典。
運行結果是:
get請求只能傳入簡單的參數,如果參數比較復雜或者傳入的參數比較多的話則GET請求就不再適用了,這時候就需要適用post請求方法了。
Post請求的請求類型有三種:
以表單的方式提交數據是POST請求的默認的請求格式,只需要將參數放在一個字典中進行傳入即可。
這里將請求頭的數據放在一個名為header的字典中,然後在請求時通過headers參數傳入。在請求中設置了內容類型是 application/json ,編碼格式是 charset=utf-8
傳入的是一個json字元串,通過data參數進行傳入。json字元串可以直接寫也可以通過 json.mps(dict) 方法將一個字典序列化,就像下面這樣。
文件上傳與本節爬蟲的內容無關,在此就不過多介紹了。有興趣的小夥伴可以看看 Python中如何編寫介面,以及如何請求外部介面 這篇文章。
在網路請求中,我們常常會遇到狀態碼是3開頭的重定向問題,在Requests中是默認開啟允許重定向的,即遇到重定向時,會自動繼續訪問。通過將allow_redirects 屬性設置為False不允許重定向。
通過timeout屬性可以設置超時時間,單位是秒。get方法和post方法均可設置。
通過status_code屬性可以獲取介面的響應碼。
有時候我們使用了抓包工具,這時候由於抓包證書提供的證書並不是受信任的數字證書頒發機構頒發的,所以證書的驗證會失敗,所以我們就需要關閉證書驗證。在請求的時候把verify參數設置為False就可以關閉證書驗證了。
爬蟲協議也叫做robots協議,告訴網路蜘蛛哪些頁面可以爬取,哪些頁面不能爬取
爬蟲文件的規范是:
允許所有的機器人
本文詳細介紹了Request庫的使用
3. python3套接字udp設置接受數據超時
Sometimes,you need to manipulate the default values of certain properties of a socket library, for example, the socket timeout.
設定並獲取默認的套接字超時時間。
1.代碼
1 import socket
2
3
4 def test_socket_timeout():
5 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
6 print("Default socket timeout: %s" % s.gettimeout())
7 # 獲取套接字默認超時時間
8 s.settimeout(100)
9 # 設置超時時間
10 print("Current socket timeout: %s" % s.gettimeout())
11 # 讀取修改後的套接字超時時間
12
13
14 if __name__ == '__main__':
15 test_socket_timeout()
2. AF_INET和SOCK_STREAM解釋
1 # 地址簇
2 # socket.AF_INET IPv4(默認)
3 # socket.AF_INET6 IPv6
4 # socket.AF_UNIX 只能夠用於單一的Unix系統進程間通信
5
6 # socket.SOCK_STREAM(數據流) 提供面向連接的穩定數據傳輸,即TCP/IP協議.多用於資料(如文件)傳送。
3.gettimeout()和settimeout()解釋
1 def gettimeout(self): # real signature unknown; restored from __doc__
2 """
3 gettimeout() -> timeout
4
5 Returns the timeout in seconds (float) associated with socket
6 operations. A timeout of None indicates that timeouts on socket
7 operations are disabled.
8 """
9 return timeout
10
11
12 def settimeout(self, timeout): # real signature unknown; restored from __doc__
13 """
14 settimeout(timeout)
15
16 Set a timeout on socket operations. 'timeout' can be a float,
17 giving in seconds, or None. Setting a timeout of None disables
18 the timeout feature and is equivalent to setblocking(1).
19 Setting a timeout of zero is the same as setblocking(0).
20 """
21 pass
22 # 設置套接字操作的超時期,timeout是一個浮點數,單位是秒。值為None表示沒有超時期。
23 # 一般,超時期應該在剛創建套接字時設置,因為它們可能用於連接的操作(如 client 連接最多等待5s )
4.運行結果
1 Default socket timeout: None
2 Current socket timeout: 100.0
4. python 在爬蟲中timeout設置超時有什麼作用
是為了防止url不可訪問,或者響應速度太慢而造成的時間浪費。
比如,你要爬取1000個網站,如果有100個需要30s才能返回數據,你等待他們返回的話就需要3000s了,如果你設置10s超時,那麼就能知道最長需要多久1000個可以爬完。
如果解決了您的問題請採納!
如果未解決請繼續追問
5. python安裝第三方庫超時報錯
1.pip安裝第三方包報錯,原因是超時,可能因為默認的庫源不穩定,或者網路限制原因。
解決方法:pip --default-timeout=100 install -U pandas //設置超時時間
如果以上語句還是不行,直接切換庫源,使用清華的資源庫。
pip install -i https://pypi.tuna.tsinghua.e.cn/simple -U pandas
這兩條語句也可以結合使用。
另一個超時的報錯,可以使用--upgrade參數解決(為啥一直報超時的錯呢?公司網路限制太多了啦)
pip install --upgrade -i https://pypi.tuna.tsinghua.e.cn/simple -U pandas
2.使用以上方法安裝好了package後,在pycharm中要載入這個包,可以在新建工程的時候,勾選inherit global site-packages
6. python如何設置超時重新運行
python通過subprocess模塊調用系統命令。實際使用中,有一次是命令進入了交互模式,結果web端直接卡死了。
調用時設置一個超時時間,時間用完後自動斷開。
這樣就避免了系統因為調用命令而僵死的問題。
7. 純干貨!python 在運維中的應用 (一):批量 ssh/sftp
日常工作中需要大量、頻繁地使用ssh到伺服器查看、拉取相關的信息或者對伺服器進行變更。目前公司大量使用的shell,但是隨著邏輯的復雜化、腳本管理的精細化,shell已經不滿足日常需求,於是我嘗試整合工作中的需求,製作適合的工具。 由於管理制度的缺陷,我以工作流程為核心思考適合自己的運維方式,提升工作效率,把時間留給更有價值的事情。 完整代碼在最後,請大家參考。
生產:4000+物理伺服器,近 3000 台虛擬機。
開發環境:python3.6、redhat7.9,除了paramiko為第三方模塊需要自己安裝,其他的直接import即可。
批量執行操作是一把雙刃劍。批量執行操作可以提升工作效率,但是隨之而來的風險不可忽略。
風險案例如下:
掛載很多數據盤,通常先格式化硬碟,再掛載數據盤,最後再寫入將開機掛載信息寫入/etc/fstab文件。在批量lsblk檢查硬碟信息的時候發現有的系統盤在/sda有的在/sdm,如果不事先檢查機器相關配置是否一致直接按照工作經驗去執行批量操作,會很容易造成個人難以承受的災難。
在執行批量操作時按照慣例:格式化硬碟->掛載->開機掛載的順序去執行,假設有的機器因為某些故障導致格式化硬碟沒法正確執行。在處理這類問題的時候通常會先提取出失敗的ip,並再按照慣例執行操作。運維人員會很容易忽略開機掛載的信息已經寫過了,導致復寫(這都是血和淚的教訓)。
所以,為了避免故障,提升工作效率,我認為應當建立團隊在工作上的共識,應當遵守以下原則:
當然,代碼的規范也應當重視起來,不僅是為了便於審計,同時也需要便於溯源。我認為應當注意以下幾點:
1、ssh no existing session,sftp超時時間設置:
在代碼無錯的情況下大量ip出現No existing session,排查後定位在代碼的寫法上,下面是一個正確的示例。由於最開始沒考慮到ssh連接的幾種情況導致了重寫好幾遍。另外sftp的實例貌似不能直接設置連接超時時間,所以我採用了先建立ssh連接再打開sftp的方法。
2、sftp中的get()和put()方法僅能傳文件,不支持直接傳目錄:
不能直接傳目錄,那換個思路,遍歷路徑中的目錄和文件,先創建目錄再傳文件就能達到一樣的效果了。在paramiko的sftp中sftp.listdir_attr()方法可以獲取遠程路徑中的文件、目錄信息。那麼我們可以寫一個遞歸來遍歷遠程路徑中的所有文件和目錄(傳入一個列表是為了接收遞歸返回的值)。
python自帶的os模塊中的os.walk()方法可以遍歷到本地路徑中的目錄和文件。
3、多線程多個ip使用sftp.get()方法時無法並發。
改成多進程即可。
4、多個ip需要執行相同命令或不同的命令。
由於是日常使用的場景不會很復雜,所以借鑒了ansible的playbook,讀取提前准備好的配置文件即可,然後再整合到之前定義的ssh函數中。
同時,我們還衍生出一個需求,既然都要讀取配置,那同樣也可以提前把ip地址准備在文件里。正好也能讀取我們返回的執行程序的結果。
參數說明:
密碼認證:
公鑰認證:
可以配合 grep,awk 等命令精準過濾。
個人認為 Python 在初中級運維工作中的性質更像是工具,以提升工作效率、減少管理成本為主。可以從當前繁瑣的工作中解脫出來,去 探索 更有價值的事情。python 本質上並不會減少故障的產生,所以在不同的階段合理利用自身掌握的知識解決當前最重要的痛點,千萬不要本末倒置。
8. 限python限制其他軟體使用時長
限python限制其他軟體使用時長:運行一個需要1秒才能完成的函數,超時設置為2秒:No timeout
如果我們運行time.sleep(10)並將超時設置為兩秒:finished = call_timeout(2, time.sleep, args=(10, ))
結果:Timeout
9. python requests庫中的post詳解
一、post請求及響應詳解
返回結果:
大家看,其實通過post發送請求很簡單
下面再講講返回信息的具體內容
大家看,其實有很多的返回值參數,其實我們實際中能用到的並不多,我下邊一一列舉出來了
response.json():返回信息的格式是json,應為我們請求的時候是json格式,返回的也是一個json,如果返回報錯,應該是開發的介面出錯了
response.text:如果response.json,可以使用text調試一下,看看具體的返回內容是什麼,這里看到的都是字元串了
response.status_code:返回的http狀態碼,200是成功,404是未找到介面路徑,500是伺服器錯誤,等等
response.url:返回請求時的url地址
response.headers:返回伺服器給你的響應header
response.cookies:返回伺服器給你的cookies,這是一個多麼好的獲取cookie的方法啊,
response.content:同response.text是一樣的
二、post請求中的其他參數
復制
import requests
res = requests.post(url="url",data="body",timeout=30,verfiy=False)
print(res.json())
url:請求的全路徑地址,一定是要完整的路徑哦
data:請求的內容,如果是json的格式,最好使用json.mps,反序列化一下,避免格式錯誤,如果是其他格式,就都是字元串了
timeout:設置超時時間,這樣我們在自動化測試和爬蟲的時候,當達到了設置的超時時間,我們的程序就退出不會一直等待了,可以做其他操作了
verfiy:如果請求的介面是https協議,這個參數就很好用了,如果設置該參數為True,那麼我們的腳本就是要配置CA證書,建議參數值為False,好用又簡單
好了,post的請求詳解就這些了,歡迎大家點贊留言,我會給大家解答疑問的
10. python中調用兩個函數,怎樣能不超時
超時機制。python中調用兩個函數需要給函數設置超時機制,以防止它超時,這里可以用python的signal模塊,signal模塊可以實現程序內部的信號處理。