Python 給openCV走一個(一)

先本身吹一波

鄙人,Python愛好者一枚,準備花半個學期搞一搞opencv,以前玩的時候多有涉及,此次準備認真搞搞html

  1. 鄙人儘可能少說廢話,說的有意思一點
  2. 儘可能將出處,參考文獻標上

前奏

這準備搞,得有點兒資料吧,正好老師給了個連接......不過,那個某度網盤的連接是照片版的
clipboard.png
開始我也沒在乎,屢次輸入連接發現,老是頁面不存在,後來想起,我和同窗發生過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])

clipboard.png

簡單在 spyder中嘗試代碼,我發現:
clipboard.png
這隻小黃雞返回的頁面中有一個字符串:頁面不存在
這我就過高興了,正常的連接頁面通常不會有這個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

一頓傻瓜式默認操做,裝完了.....
接下來裝包吧:
什麼numpyscipymatplotlib通通裝上,推薦用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 # 刪除你這個環境

知道這麼幾條應該夠使了

相關文章
相關標籤/搜索