Python极客

说明使用Anaconda安装,是方便控制虚拟环境Python的版本,不于本机的全局相冲突。比如:全局==>Python3.8/虚拟环境==>Python3.6PyTorch0.4/虚拟环境==>Python3.7PyTorch1.7安装参考:https://bigdataboy.cn/post-342.html安装CUDA正常安装过程就行CUDA(ComputeUnifiedDeviceArchitecture),是显卡厂商NVIDIA推出的运算平台。CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。下载网站:https://developer.nvidia.com/cuda-downloads历史版本下载:https://developer.nvidia.com/cuda-toolkit-archive检测CUDAcmd输入:nvcc-V安装cuDNNNVIDIAcuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIAcuDNN可以集成到更高级别的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的流行caffe软件。简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是简单调整性能,同时还可以在GPU上实现高性能现代并行计算。cuDNN的下载需要登录,但是nvidia登录时的验证码经常被强(各种办法尝试都不行),登陆难度极大不用登陆小技巧:进入历史版本选择好,右键复制链接(就是资源实际地址),然后使用迅雷等工具下载下载网站:https://developer.nvidia.com/rdp/cudnn-download历史版本:https://developer.nvidia.com/rdp/cudnn-archive解压&移动解压下载的cuDNN把解压的cuDNN里的文件,移动到[路径]\NVIDIAGPUComputingToolkit\CUDA\v11.4\下相应的文件下cnDNN[bin]->CUDN[bin]cnDNN[include]->CUDN[include]cnDNN[lib\x64]->CUDN[lib\x64]添加环境变量把下面两个路径添加进环境变量C:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v11.4\lib\x64C:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v11.4\检测结果cmd运行这个exe程序创建虚拟环境condacreate-npytorchpython=3.7虚拟环境名字:pytorch虚拟环境PY版本:3.7安装PyTorch切换环境condaactivatepytorch查看本机CUDA版本生成安装命令&安装PyTorch有点大,安装时耐心等待PyTorch官网:https://pytorch.org/命令:condainstallpytorchtorchvisiontorchaudiocudatoolkit=11.1-cpytorch-cconda-forge如果下载是在太慢,可以先用其他工具下载好,再本地安装PyTorch国内镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorchcondainstall--use-local~/Downloads/a.tar.bz2验证安装进入pytthonshell进行验证importtorchprint(torch.__version__)print(torch.cuda.is_available())Pycharm使用该环境创建新项目,使用conda管理虚拟环境选择这个环境验证

Python极客

安装AnacondaAnaconda历史版本:https://repo.anaconda.com/archive/(本文使用:Anaconda3-5.2.0-Windows-x86_64.exe)正常安装过程同意->下一步->下一步->…->跳过(Skip)不安装VS->完成校验安装是否成功打开AnacondaPrompt配置环境变量添加{路径}Anaconda3\Scripts到Path里cmd输入:conda--version常用操作修改下载源可参考清华源官方文:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/打开C:\Users\[电脑用户名]\.condarcchannels:-defaultsshow_channel_urls:truedefault_channels:-https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main-https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r-https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2custom_channels:conda-forge:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmsys2:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud查看修改后的源命令:condainfo常用命令建议在AnacondaPrompt里使用,而不是在cmd更新全部工具包condaupgrade--all创建指定Py版本虚拟环境condacreate-n[名字]python=[版本号]condacreate-nvenvpython=3.6进入虚拟环境condaactivate[名字]模块安装(进入环境执行)condainstall[模块名]或者pipinstall[模块名]卸载模块(进入环境执行)condaremove[模块名]或者pipuninstall[模块名]卸载环境condaremove-n[环境名]--all查看环境列表condaenvlist

2021-8-25 122 0
Python极客

安装&加载pip3installpymongo-ihttps://mirrors.aliyun.com/pypi/simple/importpymongo连接MongoDB服务client=pymongo.MongoClient("mongodb://localhost:27017/")print(client)--------------#Mongo服务MongoClient(host=['localhost:27017'],document_class=dict,tz_aware=False,connect=True)获取所有数据库dblist=client.list_database_names()print(dblist)-------------#所有数据库名称['admin','config','local']创建数据库&获取数据库对象如果没有该数据库则创建db=client["db"]print(db)---------#db数据库对象Database(MongoClient(host=['localhost:27017'],document_class=dict,tz_aware=False,connect=True),'db')创建集合&获取集合如果没有该集合则创建#创建集合collection=db["collection"]print(sets)-----------#sets集合对象Collection(Database(MongoClient(host=['localhost:27017'],document_class=dict,tz_aware=False,connect=True),'db'),'sets')#获取所有集合sets=db.list_collection_names()print(sets)--------------#该数据库所有集合['collection']插入数据#插入一条数据data={"name":"bigdataboy","age":"18"}x=collection.insert_one(data)print(x.inserted_id)--------#数据的_id5ed666e1bca2037c30662e97#插入多条数据datas=[{"name":"大数据男孩","age":"18"},{"name":"bigdataboy","age":"16","addr":"China"},{"name":"bigdataboy","age":"18"}]x=collection.insert_many(datas)print(x.inserted_ids)---------------------#插入数据的_id[ObjectId('5ed667e044fb69d445e510d8'),ObjectId('5ed667e044fb69d445e510d9'),ObjectId('5ed667e044fb69d445e510da')]自定义_id#链式写法collection=pymongo.MongoClient("mongodb://localhost:27017/")["db"]["collection"]#数据自行固定_iddatas=[{"_id":"1","name":"大数据男孩","age":"18"},{"_id":"2","name":"bigdataboy","age":"16","addr":"China"},{"_id":"3","name":"bigdataboy","age":"18"}]i=collection.insert_many(datas)print(i.inserted_ids)---------------------#插入数据的_id['1','2','3']查看所有数据collection=pymongo.MongoClient("mongodb://localhost:27017/")["db"]["collection"]forxincollection.find():print(x)------------#所有数据{'_id':'1','name':'大数据男孩','age':'18'}{'_id':'2','name':'bigdataboy','age':'16','addr':'China'}{'_id':'3','name':'bigdataboy','age':'18'}

Python极客

安装&加载pip3installrequests-ihttps://mirrors.aliyun.com/pypi/simple/importrequestsGET请求#普通请求r=requests.get('https://bigdataboy.cn/')#带Query参数,等价于https://bigdataboy.cn/?key1=value1&key2=value2payload={'key1':'value1','key2':'value2'}r=requests.get('https://bigdataboy.cn/',params=params)#带Headersheaders={'user-agent':'anoyi-app/0.0.1'}r=requests.get('https://bigdataboy.cn/',headers=headers)#带BasicAuthenticationr=requests.get('https://bigdataboy.cn/',auth=('user','pass'))POST请求POST请求-表单提交r=requests.post('https://bigdataboy.cn/',data={'key':'value'})POST请求-x-www-form-urlencodedheaders={'content-type':'application/x-www-form-urlencoded;charset=UTF-8'}r=requests.post('https://bigdataboy.cn/',headers=headers,data='key=value')POST请求-application/jsonpayload={'some':'data'}r=requests.post('https://bigdataboy.cn/',json=payload)其他请求#PUTr=requests.put('https://bigdataboy.cn/',data={'key':'value'})#DELETEr=requests.delete('https://bigdataboy.cn/')#HEADr=requests.head('https://bigdataboy.cn/')#OPTIONSr=requests.options('https://bigdataboy.cn/')网络响应-Reponse基本信息#状态码r.status_code#响应头r.headers#响应Cookier.cookies返回结果#文本内容r.text#二进制r.content#JSONr.json()#流r=requests.get('https://bigdataboy.cn/',stream=True)r.raw.read(10)常用方法URL编码fromrequests.utilsimportquotequote('ab')->'a%20b'URL解码fromrequests.utilsimportunquoteunquote('a%20b')->'ab'自动推断响应编码r.encoding=r.apparent_encoding下载文件r=requests.get('https://bigdataboy.cn/')open('bigdataboy.html','wb').write(r.content)上传文件files={'file':open('report.xls','rb')}r=requests.post(url,files=files)超时设置#单位:秒requests.get('https://bigdataboy.cn/',timeout=0.001)

Python极客

高阶函数使用—-函数式编程Python函数的参数可以是:字符串,整数…普通的变量,但Python函数的参数还能是一个函数,返回值也能是一个函数。函数作为参数函数fun()接受一个函数f作为参数首先定义一个主函数函数的第一个参数需要传入一个函数deffun(f,a:int,b:int):returnf(a)+f(b)定义参数函数,只是简单的返回参数deff(num):returnnum使用主函数print(fun(f,1,2))-------------------3函数作为返回值定义返回值函数f()deff(num):returnnum**num定义主函数fun(),直接返回f()函数deffun():#不能加括号,带括号就是调用returnf使用主函数第一个括号调用fun()函数,第二个括号调用返回的函数foo=fun()print(foo)#一个函数print(foo(2))#合并写法print(fun()(2))---------------<functionfat0x000001FD81A62268>44内置的高阶函数sort()排序普通排序使用list=[1,5,6,8,7,6,5,5,2]list.sort(reverse=True)#降序print(list)---------------------------[8,7,6,6,5,5,5,2,1]高级使用—按照指定规则排序按照十位数的大小排序#作为参数的函数deffun(num):returnstr(num)[0]list=[11,51,61,82,72,64,52,512,21]list.sort(key=fun,reverse=True)print(list)------------------------------------[82,72,61,64,51,52,512,21,11]#使用匿名函数合并list=[11,51,61,82,72,64,52,512,21]list.sort(key=lambdanum:str(num)[0],reverse=True)print(list)------------------------------------[82,72,61,64,51,52,512,21,11]map()&filter()函数编程语言通常都会提供map,filter,reduce三个高阶函数。在Python3中,map和filter仍然是内置函数,但是由于引入了列表推导和生成器表达式,他们变得没有那么重要了。列表推导和生成器表达式具有了map和filter两个函数的功能,而且更易于阅读。map生成新的迭代类型list_m=map(lambdanum:num**2,[1,2,3,4,5,6,7])print(list(list_m))print(type(list_m))-------------------[1,4,9,16,25,36,49]<class'map'>列表推导实现map()list_m=[num**2fornumin[1,2,3,4,5,6,7]]print(list_m)-------------[1,4,9,16,25,36,49]同时迭代多个list,生成新的迭代类型的长度是最短list的长度list1=[10,20,30,40]list2=[1,2]list_m=map(lambdaa,b:a+b,list1,list2)print(list(list_m))-------------------[11,22]注意列表推倒中这里是使用的笛卡尔积list1=[10,20,30,40]list2=[1,2]list_m=[a+bforainlist1forbinlist2]print(list_m)-------------[11,12,21,22,31,32,41,42]filter过滤filter参数函数的返回值需要是布尔值list_m=filter(lambdanum:num%2,[1,2,3,4,5,6,7])print(list(list_m))-------------------[1,3,5,7]列表推导实现filter()list_m=[numfornumin[1,2,3,4,5,6,7]ifnum%2==1]print(list_m)-------------[1,3,5,7]reducePython3中reduce被移动到了functools模块中fromfunctoolsimportreduce用法两两做运算fromfunctoolsimportreducenum=reduce(lambdaa,b:a+b,[1,2,3,4,5,6,7],0)#0为a的初始值print(num)----------28

Python极客

迭代器迭代器就是可以使用for循环的对象,list、str、tuple….那怎样才能实现这样的迭代?nums=[12,13,14]strs="python"tuples=(1,2,3,4,5)fornuminnums:print(num)一个对象可迭代的条件需要这个对象有__iter__()方法classClassmate(object):#有了这个方法该类就是可迭代的def__iter__(self):pass添加一个列表和添加方法给Classmate类classClassmate(object):def__init__(self):#存储self.namesList=list()defadd(self,other):#添加到列表里self.namesList.append(other)#有了这个方法该类就是可迭代的def__iter__(self):pass迭代器一个对象有__iter__()和__next__()方法叫迭代器如果使该对象可以返回迭代的数据:就需要一个迭代器的__next__()方法定义一个迭代器类classClassIterator(object):def__iter__(self):passdef__next__(self):pass完善一个可以执行的迭代器迭代对象的__iter__()方法需要返回一个迭代器对象#可迭代对象classClassmate(object):def__init__(self):self.namesList=list()defadd(self,other):self.namesList.append(other)#有了这个方法该类就是可迭代的def__iter__(self):#需要反对一个迭代器对象#把self传给迭代器,使迭代器可以获取self.namesListreturnClassIterator(self)#迭代器对象classClassIterator(object):def__init__(self,obj):self.nameList=obj.namesList#记录循环的次数self.count=0def__iter__(self):passdef__next__(self):ifself.count<len(self.nameList):name=self.nameList[self.count]self.count+=1returnnameelse:#自定义一个异常停止循环raiseStopIteration#主函数classmate=Classmate()#实例化对象classmate.add("小小")classmate.add("大大")classmate.add("中中")#for循环对象fornameinclassmate:print(name)把迭代对象类和迭代器类合并迭代对象和迭代器是两个类,那是否可以合并classClassmate(object):def__init__(self):self.namesList=list()self.count=0defadd(self,other):self.namesList.append(other)#有了这个方法该类就是可迭代的def__iter__(self):#需要反对一个迭代器对象#把列表传给迭代器returnselfdef__next__(self):ifself.count<len(self.namesList):name=self.namesList[self.count]self.count+=1returnnameelse:#自定义一个异常停止循环raiseStopIteration

编程杂谈

0x00创建爬虫工程进入要创建爬虫的文件下,执行下面命令scrapystartprojectbigdataboy0x01创建爬虫项目进入爬虫工程目录,执行命令,创建第一个爬虫scrapygenspiderbigdataboy_spiderbigdataboy.cn0x02设置爬虫打开settings.py文件,取消下面代码的注释#开启pipelines功能#Configureitempipelines#Seehttps://docs.scrapy.org/en/latest/topics/item-pipeline.htmlITEM_PIPELINES={'bigdataboy.pipelines.BigdataboyPipeline':300,}#添加'User-Agent'#Crawlresponsiblybyidentifyingyourself(andyourwebsite)ontheuser-agentUSER_AGENT=''}0x03编写网页的解析打开bigdataboy_spider.py文件有一个defparse(self,response):函数:这个函数的response是Scrapy框架爬取网页的相应返回值,它是一个scrapy.http.response.html.HtmlResponse对象,所以可以使用xpath,css…提取数据#导入item模型frombigdataboy.itemsimportBigdataboyItemdefparse(self,response):#使用xpath解析网页articleUrl=response.xpath('//div[@class="item-desc"]/a/@href').extract()item=BigdataboyItem(url=articleUrl)#使用定义的item定义的传输参数进行传递yielditem#获取下一页的连接nextUrl=response.xpath('//*[@id="pagenavi"]/div/ol//*[@class="next"]/a/@href').get()#print(nextUrl)ifnextUrl:#传入连接,然后执行的函数yieldscrapy.Request(nextUrl)else:return0x04定义item模型打开items.py文件classBigdataboyItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()url=scrapy.Field()#自定义的模型0x05导出数据打开pipeline.py文件fromscrapy.exportersimportJsonItemExporterclassBigdataboyPipeline(object):def__init__(self):self.openFile=open("url.json","wb")#需要使用二进制打开文件,因为在导出过程中是使用的[字节]方式#传入文件打开对象self.exporter=JsonItemExporter(self.openFile)#准备导出self.exporter.start_exporting()#爬虫开始执行调用这个函数defopen_spider(self,spider):print("爬虫开始执行")defprocess_item(self,item,spider):#导出数据self.exporter.export_item(item)returnitem#爬虫执行结束调用这个函数defclose_spider(self,spider):#完成导出self.exporter.finish_exporting()#关闭文件打开self.openFile.close()print("爬虫执行完成")0x06运行爬虫执行命令在Pycharm的Terminal里执行scrapycrawlbigdataboy_spider查看运行结果

编程杂谈

项目背景我们可以通过爬虫来模拟登录来查询自己的成绩,这其中最重要的就是登录这个关卡,只要通过了,就可以方便的查询自己的成绩了。但是我们还是要在法律的允许条件下爬取数据,下列的代码已进行隐私处理,并不针对任何组织。爬虫分析通过抓包,发现登录需要提交学号、密码、验证码、VIEWSTATE通过分析发现其中的VIEWSTATE参数就在网页中,所以我们可以通过正则表达式匹配出来爬虫项目结构importreimportrequestsclassAPI(object):...classTool(object):...API类·通过抓包,知道了以下接口classAPI(object):#登录页GET_INDEX="http://XXXXXXXX:XXXX/"#获取验证码GET_YZM_URL='http://XXXXXXXX:XXXX/CheckCode.aspx'#登录POST_LOGIN='http://XXXXXXXX:XXXX/default2.aspx'Tool类classTool(object):session=requests.session()VIEWSTATE=""#获取VIEWSTATE参数@classmethoddefgetHtml(cls):response=cls.session.get(API.GET_INDEX).textcls.VIEWSTATE=re.search(r'__VIEWSTATE"value="(.*?)"/>',response).group(1)#下载验证码在当前路径@classmethoddefdownload_yzm(cls):yzm_image=cls.session.get(url=API.GET_YZM_URL)withopen("yzm.jpg",'wb')asfile:file.write(yzm_image.content)#登录方法@classmethoddeflogin(cls,account,pwd,yzm):data={"__VIEWSTATE":cls.VIEWSTATE,"TextBox1":account,"TextBox2":pwd,"TextBox3":yzm,"RadioButtonList1":"%D1%A7%C9%FA","Button1":"",}response=cls.session.post(url=API.POST_LOGIN,data=data)response.encoding=response.apparent_encodingresponse=response.texttry:message=re.search(r">alert\('(.*?)'\);</script>",response).group(1)except:#登录成功跳转到详情页xm=re.search(r'<spanid="xhxm">(.*?)同学</span>',response).group(1)print("欢迎"+xm+"登录成功")else:#打印出登录失败信息print(message)主函数defmain():t=Tool()#实例化类t.getHtml()#获取VIEWSTATEt.download_yzm()#下载验证码account=input("请输入你的学号:")pwd=input("请输入你的密码:")yzm=input("请输入验证码:")t.login(account,pwd,yzm)#运行登录方法