鄙人,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 # 删除你这个环境
知道这么几条应该够使了