鄙人,Python愛好者一枚,準備花半個學期搞一搞opencv
,以前玩的時候多有涉及,此次準備認真搞搞html
這準備搞,得有點兒資料吧,正好老師給了個連接......不過,那個某度網盤的連接是照片版的
開始我也沒在乎,屢次輸入連接發現,老是頁面不存在,後來想起,我和同窗發生過I 1 l
尷尬,就是數字1,小寫L和大寫i傻傻分不清
行吧,I、l和1一共出現了4次而已,寫個爬蟲搞搞python
import requests as r headers={"User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ", "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Connection" : "keep-alive", "Accept-Charset" : "GB2312,utf-8;q=0.7,*;q=0.7"} link = 'xxxxxxx' # 這是個錯誤的網址 respon = r.get(link, headers=headers) respon.encoding = 'utf-8' # 改下編碼 print(respon.text[:500])
簡單在 spyder
中嘗試代碼,我發現:
這隻小黃雞返回的頁面中有一個字符串:頁面不存在
這我就過高興了,正常的連接頁面通常不會有這個8,隨便找了一個正常的某度網盤下載連接試了一下沒有(你們能夠本身試試)segmentfault
因而,思路是,將I、l和1在某度網盤連接中不斷更換位置,並持續請求返回 text,若字符串'頁面不存在'不存在,那就是這個鏈接了
代碼以下:app
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon Sep 16 16:01:41 2019 @author: Ryan """ import requests as r import numpy as np headers={"User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ", "Connection" : "keep-alive", } raw_link = 'https://pan.baidu.com/s/1GvlYt6aFtXXXXXXDX1OQ' iL1 = ['I', 'l', '1'] def get_iL1_index(link, iL1_list): # 獲得鏈接中 1iL 的位置 # iL1 list # iL1 = ['I', 'L', '1'] 只爲解耦合 iL1 = iL1_list # iL1 在 link字符串中的位置 index_list = [] # 用一個技巧 raw_link_array = np.array(list(link)) # 轉換爲 np.array for x in iL1: # 找尋 iL1 的位置, 並添加到 index_list index_list.append( np.where(raw_link_array == x)[0] ) # 轉換 index_array = np.concatenate(index_list, axis=0) return index_array def decimal_return(num_len, candidates): ''' 某進制候選產生函數 num_len : 進制位數 candidates : 候選列表, 元素類別爲 str 返回全部 str 列表 ''' counter_array = np.zeros(shape=(num_len), dtype=np.int64) # 注意此處必須爲 int 類型 candidates_copy = candidates.copy() # 克隆候選列表 str_need = '' candidates_len = len(candidates) str_need_list = [] while(1): for index in range(num_len): str_need += candidates_copy[ counter_array[index] ] counter_array[0] += 1 if counter_array[0] == candidates_len: for x in range(num_len): if counter_array[x] == candidates_len: counter_array[x+1] += 1 counter_array[counter_array == candidates_len] = 0 # 總體清零 counter_array[0] = 0 str_need_list.append( str_need ) str_need = '' if np.sum(counter_array) == num_len * (len(candidates) - 1): # 此處手動添加, 差一次(此處可能有 ) str_need_list.append( num_len*candidates[-1] ) break return str_need_list raw_link_list = np.array(list(raw_link)) # 將連接字符串轉化爲 list iL1_index = get_iL1_index(raw_link, iL1) # 找到連接中 iL1 中的位置 replace_list = decimal_return(len(iL1_index), iL1) for index, replace_str in enumerate(replace_list): raw_link_list[iL1_index] = list(replace_str) link = ''.join(raw_link_list) link_respo = r.get(link, headers=headers) link_respo.encoding = 'utf-8' if '頁面不存在' in link_respo.text: print(index, link, '文件不存在\n') elif '你來晚了' in link_respo.text: print(index, link, '文件被取消\n') else: print(index, link,'成功\n')
行吧,這才找到了下載連接,下就完事了……函數
一說環境搭建,咱都知道anaconda
全家桶,今兒經常新鮮事物miniconda
,要說幾個conda
的區別,我參考了這篇博客工具
conda是一種通用包管理系統,旨在構建和管理任何語言和任何類型的軟件。舉個例子:包管理與pip的使用相似,環境管理則容許用戶方便地安裝不一樣版本的python並能夠快速切換。Anaconda則是一個打包的集合,裏面預裝好了conda、某個版本的python、衆多packages、科學計算工具等等,就是把不少經常使用的不經常使用的庫都給你裝好了。編碼
Miniconda,顧名思義,它只包含最基本的內容——python與conda,以及相關的必須依賴項,對於空間要求嚴格的用戶,Miniconda是一種選擇。就只包含最基本的東西,其餘的庫得本身裝。spa
這兒有關於三者更深的討論.net
miniconda
官方下載連接:https://docs.conda.io/en/late...
清華大學官方開源鏡像站下載連接:https://mirrors.tuna.tsinghua...3d
一頓傻瓜式默認操做,裝完了.....
接下來裝包吧:
什麼numpy
、scipy
、matplotlib
通通裝上,推薦用conda
裝
咱重點不在環境搭建哈,簡單操做就很少說了
這裏有一個關於安裝openCV的坑:
安裝openCV contrib指北
順便放幾條指令:
conda update --all # 更新 miniconda conda list # 列出安裝的全部應用包 conda install <pkg name> # 安裝應用包 conda update <pkg name> # 升級應用包 conda create -n venv python=3.7 # 建立新環境 Python版本爲3.7,名字爲venv conda activate venv # 進入 conda 虛擬環境 conda deactivate # 退出 conda 虛擬環境 conda remove -n yourenvname --all # 刪除你這個環境
知道這麼幾條應該夠使了