先自己吹一波

鄙人,Python爱好者一枚,准备花半个学期搞一搞opencv,之前玩的时候多有涉及,这次准备认真搞搞

  1. 鄙人尽量少说废话,说的有意思一点
  2. 尽量将出处,参考文献标上

前奏

这准备搞,得有点儿资料吧,正好老师给了个链接......不过,那个某度网盘的链接是照片版的
clipboard.png
开始我也没在意,多次输入链接发现,总是页面不存在,后来想起,我和同学发生过I 1 l尴尬,就是数字1,小写L和大写i傻傻分不清
行吧,I、l和1一共出现了4次而已,写个爬虫搞搞

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,随便找了一个正常的某度网盘下载链接试了一下没有(大家可以自己试试)

于是,思路是,将I、l和1在某度网盘链接中不断更换位置,并持续请求返回 text,若字符串'页面不存在'不存在,那就是这个连接了
代码如下:

#!/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是一种选择。就只包含最基本的东西,其他的库得自己装。

这儿有关于三者更深的讨论

miniconda官方下载链接:https://docs.conda.io/en/late...
清华大学官方开源镜像站下载链接:https://mirrors.tuna.tsinghua...

一顿傻瓜式默认操作,装完了.....
接下来装包吧:
什么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 # 删除你这个环境

知道这么几条应该够使了


王尼玛
373 声望13 粉丝

此号作废!