python如何下載163超大附件?
電競專業主要學什么課程的

在寫爬蟲的過程中常常遇到下載大文件的情況,比如說視頻之類的。如果只是傳統的直接下載保存,速度就比較慢,所有就想寫個多線程同步下載大文件的模塊。
使用到的庫
模塊中使用到的庫都比較簡單:requests(寫爬蟲的都知道吧),threading(多線程,必須的),os(文件操作需要用到)。
主要的難點
一個是多線程下載的同步問題,另一個是文件中斷下載后,再次開始從上次中斷的地方繼續下載。
其實我覺得就這兩個問題,迅雷之類的下載器早就已經給我們做了個解決方法事例,那就是在下載文件的路徑添加一個管理下載進度的文件。
具體實現
模塊中有兩個類,一個負責處理管理文件的更新和創建等,還有一個是線程任務,發下載請求,寫入文件等。
管理文件類
文件內的格式使用的是很簡單的用“=”分割的配置文件的形式,包括四個配置信息,分別是:【已寫入的字節】range,【未寫入的字節】range,【寫入中的字節】range和文件下載的url。之前所說的比較難處理的問題都是用這個管理文件解決的。
配置文件
- writing_range=(42991616,46137344)]
- unwritten_range=(46137344,10633872234)]
- written_range=(0,42991616)]
- url_in_file=https:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
主要思路是,剛開始下載時創建這個文件,獲取帶下載文件的大小,并填入【未下載字節】中去。然后其他線程同步的不斷從這個【未下載字節】的中提取一小部分寫到【下載中字節】,發請求下載,并寫入到文件中去,之后再把已經下載好的字節寫入到【已下載字節】中去。因為考慮到下載的字節可能時一段一段分隔開的,所有寫成圖中所示的形式。
其實對range的分割,合并(也就是這個類的主要功能)還是需要一些小技巧的,如果想要自己先練練的話可以前往https://leetcode.com/problems/insert-interval/
之前也是寫的時候感覺很熟悉,發現在leetcode上做過類似的題目。
多線程下載類
這個類就沒有什么比較復雜的處理了,主要就是讀取待下載字節的同步,獲得文件大小,下載文件Range。(在http(s)中,文件下載是分了很多次請求的,每次請求的headers中帶上Range可以指明需要下載文件的哪一部分,格式為:Range:bytes=1024-2048)獲取文件大小可以先發一個Range:bytes=0-0這樣的請求過去,響應中的header會帶有content-Range的頭部(如果他需要的話,一般都會有),這個值就是文件的總大小。
多線程同步,就用普通的鎖就好了(threading.Lock類),文件內容的寫入和配置的讀取都需要。寫入到文件的指定位置用的是file的seek函數,不清楚的可以百度一下,就跟c里面的移動文件位置指針一樣。
對了,外面還有一個創建這些下載線程的守護線程。
總結
這樣子,大文件的多線程下載和中斷續傳功能就得以實現了。

電競專業主要學什么課程的
電競不只是打游戲!這門專業主要內容是學習Python語言,Python作為當今主流計算機程序設計語言,主要目的是為了提升學生的程序設計意識,了解產業構架,更好的適應當今電競產業發展和數據開發”于此,Python成了這批學生的必修課。
電競專業還會學習當今電子競技行業現狀、電子競技大數據分析、戰隊戰術策略信息分析與設計、電子競技分析導論、電子競技游戲解析、競技策略分析、競技運籌學、電子競技心理學、競技思維導圖、電子競技數據分析方法、競技戰隊戰術設計與優化、電子競技節目制作等課程等課程。
電競專業方向大致是大數據、比賽方案規劃、戰隊戰略分析、賽事的專業解說等,課程設置了12門核心課程,包括電子競技游戲解析、競技運籌學、電競心理學、競技戰隊戰術設計與優化、電子競技節目管理與運營等。畢業生的就業規劃則有電子競技數據分析與智慧服務、電競賽事策劃與運營、電競賽事分析解說等方向。
手機瀏覽
全國
19974831731
