环境 :Python 2.7 + Django 1.8
名词介绍 :
Python 是一种面向对象,解释型计算机程序设计语言,具有丰富和强大的库。
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。在这里就是通过爬虫把成绩网页抓取下来,然后再用正则表达式提取出来需要的信息。
Django 是一个常用的python web 框架,采用了MVC 的框架模式,即模型M,视图V和控制器C,自带的功能比较多和全面,适合快速开发。
设计过程:
其实刚开始我只是学习在学习Python 爬虫时跟随着教程写了一个可以查询自己学校成绩的代码,只是在命令行中显示出来成绩显得很不友好,后来想算学分积的话就要做一个图形化界面,然后就想到了做一个网页。
1.网络爬虫的实现:
相关教程:
http://cuiqingcai.com/1052.html
https://www.zhihu.com/question/20899988
这个爬虫也就是查询学分积的核心,一共包含四个部分:
1.模拟登陆到教学管理系统
2.抓取成绩界面
3.从里边提取出成绩信息
4.将成绩信息以每学科,每学期的形式进行整理
1.模拟登陆到教学管理系统
首先打开浏览器(我用的是Chrome浏览器),打开登陆界面,按F12进入开发者模式。
再点登陆,在Network窗口下点最上边的login.action,然后就可以看到Headers的详细信息
在这里可以看到请求的url ,请求方式为POST ,还有Request Headers ,以及最重要的是下边的表单提交内容,学校的毕竟做的比较简陋,用的是明文的。然后在下边模拟登陆的过程中就要用到这两个数据username 和password ,关于encodePassword 和session_locale:zh_CN ,我发现加不加都没有影响,注意参数的名字也不能有误,要和上边的保持一致。
接下来就是要实现 模拟登陆了,就像登陆一样,目的都是为了让服务器能够识别用户的身份,进行session跟踪而储存在用户本地终端上的数据(通常经过加密),这里为了实现模拟登陆就要用到Python的urllib ,urllib2 ,以及cookielib 模块。urllib和urllib2主要用来执行各种HTTP请求,cookielib 模块的主要作用是提供可存储cookie 的对象,以便于与urllib2模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,以此来实现模拟登录功能。这里相关模块的具体用法都不再具体说明,可以自己去搜相关的文档。学校的网站不用添加headers就可以直接登录了。
模拟登陆代码如下所示:
import urllib
import urllib2
import cookielib
import re
import string
import types
class NPU:
def __init__(self,name,passwd):
#登录URL
self.loginUrl = 'http://us.nwpu.edu.cn/eams/login.action'
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
self.cookies = cookielib.MozillaCookieJar('cookie.txt')
self.postdata = urllib.urlencode({
'username':name,
'password':passwd,
'encodedPassword':'',
'session_locale':'zh_CN',
})
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
#handler = urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
#opener = urllib2.build_opener(handler)
#下边一句把上边两句合一块了
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
#获取本学期成绩页面
def getPage(self):
try:
#建立一个请求
request = urllib2.Request(url = self.loginUrl,data = self.postdata)
#建立连接,模拟登陆
result = self.opener.open(request)
#保存cookie到文件
self.cookies.save(ignore_discard = True, ignore_expires = True)
except urllib2.URLError,e:
print '连接失败'
if hasattr(e,"reason"):
print "error",e.reason
return None
2.第二步就是获得成绩界面的html源码 ,通过这两行代码就可以实现。
result = self.opener.open(self.gradeUrl)
return result.read().decode('utf-8')
3.第三步:使用正则表达式将所需要的内容提取出来。
Python正则表达式教程如下:
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
由于返回界面的字符串非常长,从里面提取所需要的数据的话具有强大匹配字符串能力的正则表达式。
关于成绩信息,要匹配的信息有每个课程的时间,名字,学分,成绩。下边是网页中一门成绩的显示形式:
2015-2016 春
U33L11018
U33L11018.01
唐诗选讲
综合素养 2
80
80
80
0
关于这个正则表达式我前后改了好多次,后来经过测试,要考虑到实验成绩,补考成绩,所以每个人成绩表格那一栏有可能是不一样的。还有一个要注意的问题就是正则表达式的写法,正则表达式写的鲁棒性越强有可能匹配到的信息中有误,越弱即越精确则正则表达式匹配的效率可能会大大降低。
这里关于正则表达式的写法见下边
4.最后一步就是将匹配到的数据进行整理 ,为后续动态的显示在网页中做准备,通过定义课程对象Course 和学期对象Term 最终返回学期对象列表term_list
整个爬虫代码如下所示:
# -*- coding:utf-8 -*-
import urllib
import urllib2
import cookielib
import re
import string
import types
class Term:
time = ""
id = ""
courses_list = []
def __init__(self, id, time, courses_list):
self.id = id
self.time = time
self.courses_list = courses_list
def __str__(self):
return self.id+' '+self.time+' '+self.name+' '+self.courses_list
class Course:
id = ""
time = ""
name = ""
weight = 0
grade = 0
def __init__(self, id, time, name, weight, grade):
self.id = id
self.time = time
self.name = name
self.weight = weight
self.grade = grade
def __str__(self):
return self.id+' '+self.time+' '+self.name+' '+str(self.weight)+' '+str(self.grade)
class NPU:
def __init__(self,name,passwd):
#登录URL
self.loginUrl = 'http://us.nwpu.edu.cn/eams/login.action'
#成绩URL
self.gradeUrl = 'http://us.nwpu.edu.cn/eams/teach/grade/course/person!historyCourseGrade.action?projectType=MAJOR'
self.cookies = cookielib.MozillaCookieJar('cookie.txt')
self.postdata = urllib.urlencode({
'username':name,
'password':passwd,
'encodedPassword':'',
'session_locale':'zh_CN',
})
#成绩对象数组
#构建opener
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
#获取本学期成绩页面
def getPage(self):
try:
request = urllib2.Request(url = self.loginUrl,data = self.postdata)
#建立连接,模拟登陆
result = self.opener.open(request)
self.cookies.save(ignore_discard = True, ignore_expires = True)
#打印登录内容
#print 'asdf'
#print result.read()
#获得成绩界面的html
result = self.opener.open(self.gradeUrl)
return result.read().decode('utf-8')
except urllib2.URLError,e:
print '连接失败'
if hasattr(e,"reason"):
print "error",e.reason
return None
def getGrades(self, page):
#print page
reg = 'not find#$$'
tablelen11= '\s*?\s*? \s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*? '
tablelen12= '\s*?\s*? \s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*? '
tablelen13= '\s*?\s*? \s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*? '
tablelen14= '\s*?\s*? \s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*?\s*? '
if re.search(u'补考成绩', page) and re.search(u'实验成绩', page) and re.findall(tablelen14, page,re.S):
print '14'
reg = '\s*?(.*?) .*?(.*?) .*?(.*?) \s*(\w*).*?<.*?'
elif re.search(tablelen12, page,re.S):
print '12'
reg = '\s*?(.*?) .*?(.*?) .*?(.*?) \s*(\w*).*?<.*?'
# if re.findall(u'补考成绩', page):
# print '含补考成绩'
# reg = '\s*?(.*?) .*?(.*?) .*?(.*?) \s*(\w*).*?<.*?'
myItems = re.findall(reg, page, re.S)
if myItems:
print '查询成功'
else:
print '查询失败'
grade_dict = {}
terms = []
term_list = []
cnt = 1
for item in myItems:
print item[0],item[1],item[2],item[3]
#print item[0].encode('utf-8'),item[1].encode('utf-8'),item[2].encode('utf-8'),item[3].encode('utf-8')
#print type(item[0]), type(item[1]), type(item[2]), type(item[3])
if re.match('^\d+\.?\d*$', item[2]) and re.match('^\d+\.?\d*$', item[3]):
courseid = 'course_'+str(cnt)
cnt = cnt+1
if not grade_dict.has_key(item[0].encode('utf-8')):
grade_dict[item[0].encode('utf-8')] = []
terms.append(item[0].encode('utf-8'))
grade_dict[item[0].encode('utf-8')].append(Course(courseid, item[0].encode('utf-8'),item[1].encode('utf-8'),string.atof(item[2]),string.atof(item[3])))
termcnt = 1
for k in terms:
termid = 'term_'+str(termcnt)
termcnt = termcnt + 1
list = grade_dict[k]
term_list.append(Term(termid, list[0].time, list))
for i in list:
print i
return term_list
用django框架来搭建网站
官方网站:
https://www.djangoproject.com/
django中文文档:
https://github.com/7sDream/django-intro-zh
bootstrap 前端框架:
http://www.bootcss.com/
其实界面一共两个,即登录界面和成绩界面,其中主界面实现的功能是实现对每个学期所有课程的全选和全不选,以及每门课程的全选和全部选,这里关于js的代码还是请教了一下Cherry和斌巨才完成的,自己写js的代码满是Bug,然后因为网页是用了bootstrap的前端框架,所以实现了适应屏幕的功能,在电脑和手机上都可以适应屏幕。
其中主要的难点就是如何向网站中动态添加数据,以及js代码中为那些Checkbox建立事件的实现,因为每个人的课程数目都是不易样的,这里采用了django里的模板标签, 然后前边写爬虫费劲心思写的两个类就派上用场了。
模板代码如下:
{% for term in term_list %}
{% endfor %}
然后就可以把这整段代码部署在服务器上了,
测试网址:http://qmlangma.cn:8000/credit/login/
展示图片:
总结:
1、通过这个项目,我学到了从前端到后台的整个流程是如何运作的,自己之前所学的爬虫的知识也派上了用场,Python的强大功能也真是令人折服。
2、 关于字符串编码的问题,python2中是一个永恒的话题。。爬虫爬下来的html是utf-8编码,还是有点迷惑,用正则表达式进行匹配时要加一个’u’ re.search(u'补考成绩', page),调了好久才调出来,自己用正则表达式时还是要写很久,不断的尝试才能得到想要的结果,自己对正则表达式的理解还是不够深入。
3、 关于html的问题,js写的还是很烂,bug找不出来,还是请的别人找的。 4、 关于debug模式关闭的问题,可以在自己本地启用debug模式,但是别的机器调用的话还是没有解决。 5、 关于项目迁移的问题,我把本地写好的代码直接复制到云主机中,发现运行不了,也不 知道出了什么问题,目前在云主机上跑的还是debug模式,原来一直想部署到apache上,一直嫌麻烦没有去做。
你可能感兴趣的:(Python)
python使用技巧
超超是超超
python
1、耗时装饰器importtimedefdecorate(func):definner():begin=time.time()result=func()end=time.time()print(f'函数{func}耗时{end-begin}')returnresultreturninner2、查看代码运行耗时fromline_profilerimportLineProfilerdefoperati
Anaconda与python和pycharm的安装及其关系
Daylight..
学习笔记 pycharm python ide
Anaconda与python和pycharm的安装及其关系一、Anaconda与python和pycharm的关系:1.Anaconda包含python,并且里面含有许多常用的库。(安装了Anaconda就不需要安装python了)2.pycharm是一种IDE(集成开发环境),在其中可以编写Python程序。(工具和语言的关系)。二、如何安装?Anaconda的安装Anaconda官网下载地址
ImportError: cannot import name ‘Mapping‘ from ‘collections‘
AI算法网奇
python基础 前端 javascript 数据库
ImportError:cannotimportname'Mapping'from'collections'解决方法:fromcollections.abcimportMapping#正确导入Mappingdefprocess_mapping(data):ifisinstance(data,Mapping):#使用Mapping进行类型检查#处理映射类型的代码pass测试命令:python-c"f
python图形界面化编程GUI(二)常用的组件(Text、Radiobutton、Checkbutton、Canvas)和布局管理器(gird、pack、place)
hwwaizs
python-GUI图形化编程 python 开发语言
Text文本框Text(多行文本框)的主要用于显示多行文本,还可以显示网页链接,图片,HTML页面,甚至CSS样式表,添加组件等。主要用来显示信息,也常被当做简单的文本处理器、⽂本编辑器或者网页浏览器来使用。IDLE就是Text组件构成的。insert插入的时候可以用INSERT代表当前光标的位置,END代表在结尾的位置,也可以用插入小数的形式,2.3代表第二行第三列后插入。fromtkinter
【深度解析】最短路径算法:Dijkstra与Floyd-Warshall
吴师兄大模型
算法 数据结构 python 最短路径算法 Dijkstra算法 Floyd-Warshall 开发语言
系列文章目录01-从零开始掌握Python数据结构:提升代码效率的必备技能!02-算法复杂度全解析:时间与空间复杂度优化秘籍03-线性数据结构解密:数组的定义、操作与实际应用04-深入浅出链表:Python实现与应用全面解析05-栈数据结构详解:Python实现与经典应用场景06-深入理解队列数据结构:从定义到Python实现与应用场景07-双端队列(Deque)详解:Python实现与滑动窗口应
CSE 231 Computer Python program
后端
CSE231Spring2025ComputerProject#4LearningobjectivesThisassignmentfocusesonthedesign,implementationandtestingofaPythonprogramthatusescharacterstringsforlookingattheDNAsequencesforkeyproteinsandseeingho
全网最全!DeepSeek 新手入门教程合集
人工智能deepseek
如果你是初次接触DeepSeek的普通用户或开发者,面对海量教程却无从下手?别担心!本文为你整理全网最易懂、最实用的DeepSeek学习资源,涵盖快速上手、编程实战、系统手册等,附直达链接,收藏这一篇就够了!一、快速入门指南《DeepSeek入门教程》-博客园亮点:手把手教你注册账号、获取APIKey,并提供Python调用多轮对话的代码示例,适合初级开发者。直达链接:点击查看核心内容:API调用
【Python】Python入门——判断语句
zhoushanguhe
Python python 编程 开发语言
Python入门——判断语句。内容包括if语句、条件表达式、三元运算、match语句等。目录一、if语句1.基本if-else语句2.常用比较运算符3.if-else连写4.pass语句5.变量的作用域二、条件表达式三、三元运算四、match语句五、其他一、if语句1.基本if-else语句当条件成立时,执行某些语句;否则执行另一些语句。注意:if和else后需要加上冒号:if语句的代码块需要缩进
兄弟们,我的deepseek终于可以控制浏览器了:Part 1/n,含代码
几道之旅
Dify:智能体(Agent) 工作流 知识库 全搞定 几道之旅AI专栏VVVIP 人工智能
文章目录前言helloworld前言其实,deepseek控制浏览器咱之前就发过,只不过当时没有想到这么好的标题,哈哈。所依赖的,依然是BrowserUse这个项目BrowserUse项目官网helloworld按照官网配置好环境后,只需新建一个python文件(例如,叫main.py?)然后运行即可。fromlangchain_openaiimportChatOpenAIfrombrowser_
CSE 231 Computer Python program
后端
CSE231Spring2025ComputerProject#4LearningobjectivesThisassignmentfocusesonthedesign,implementationandtestingofaPythonprogramthatusescharacterstringsforlookingattheDNAsequencesforkeyproteinsandseeingho
【部署】Ktransformer是什么、如何利用单卡24GB显存部署Deepseek-R1 和 Deepseek-V3
仙人掌_lz
人工智能 人工智能 AI 部署 自然语言处理
简介KTransformers是一个灵活的、以Python为中心的框架,旨在通过先进的内核优化和放置/并行策略提升HuggingFaceTransformers的使用体验。它具有高度的可扩展性,用户可通过单行代码注入优化模块,获得兼容Transformers的接口、符合OpenAI和Ollama的RESTfulAPI,甚至简化的ChatGPT风格的WebUI。KTransformers的性能优化基
C语言-回调函数的应用
woainizhongguo.
C/C++ c语言
什么是回调函数回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。工作机制⑴定义一个回调函数;⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。应用案例(1)应用层:通过调用hal层
Python Union 联合类型注解详解
人才程序员
杂谈 python 服务器 java linux 后端 软件工程 开发语言
文章目录PythonUnion联合类型注解详解1.什么是Union联合类型?**语法(Python3.9及之前版本)**:**语法(Python3.10及之后版本)**:2.Union联合类型注解示例**(1)使用Union来表示多个类型的参数****(2)使用`|`来表示联合类型(Python3.10及之后版本)**3.使用Union进行复杂类型注解**(1)使用Union与列表结合****(2
释放 DeepSeek 的力量:像专家一样本地安装与探索!
guzhoumingyue
AI python
要在本地运行DeepSeek,您需要遵循以下步骤。请确保您的计算机上已安装Python和Git,并且满足DeepSeek的依赖项。步骤1:安装依赖项安装Python和pip确保您已安装Python(建议使用Python3.6及以上版本)。您可以通过在终端/命令提示符中输入以下命令来检查Python是否已安装:bash复制代码python--version或者bash复制代码python3--ver
ffmpeg-python安装
neverayever
计算机 ffmpeg python linux
centos-ffmpeg-python安装安装ffmpeg一:下载并解压wgethttp://www.ffmpeg.org/releases/ffmpeg-4.2.tar.gztar-zxvfffmpeg-4.2.tar.gz若linux服务器没网,可以在windows上直接访问http://www.ffmpeg.org/releases/ffmpeg-4.2.tar.gz就可下载,然后上传至服
Python的那些事第二十七篇:Python中的“数据魔法师”NumPy
暮雨哀尘
Python的那些事 python numpy 开发语言 数据分析 算法 数组 索引
摘要在这篇幽默风趣的论文中,我们将深入探讨NumPy——Python中最强大的数值计算库之一。它不仅提供了高性能的多维数组对象,还让复杂的数学运算变得像吃冰淇淋一样简单。本文将通过生动的代码示例和幽默的比喻,带你领略NumPy的魔法世界,让你在欢笑中掌握这个强大的工具。一、引言:为什么NumPy是程序员的“超级英雄”?1.1NumPy的起源:从“数据苦力”到“数据魔法师”想象一下,你被困在一个全是
Python爬虫TLS
dme.
Python爬虫零基础入门 爬虫 python
TLS指纹校验原理和绕过浏览器可以正常访问,但是用requests发送请求失败。后端是如何监测得呢?为什么浏览器可以返回结果,而requests模块不行呢?https://cn.investing.com/equities/amazon-com-inc-historical-data1.指纹校验案例1.1案例:ascii2dhttps://ascii2d.net/importrequestsres
python爬虫Selenium库详细教程_python爬虫之selenium库的使用详解
嘻嘻哈哈学编程
程序员 python 爬虫 selenium
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!2.2访问页面2.3查找元素2.3.1单个元素下面
排序算法:冒泡排序(Python)
娱乐不打烊丶
排序算法 算法 数据结构
思路:大家一定都喝过汽水吧,汽水中常常有许多小小的气泡,往上飘,这是因为组成小气泡的二氧化碳比水要轻,所以小气泡才会一点一点的向上浮。而冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以向小气泡一样,根据自身大小,一点一点向着数组的一侧移动。一图解百惑,上图!那么,话不多说,上代码!defbubble_sort(input_list):#冒泡排序:每次循环,锁定一个最值,并朝着最大或
supervisord 命令介绍和使用案例
lisanmengmeng
linux 命令工具 系统运维 shell编程 服务器 linux 运维
supervisord命令介绍和使用案例supervisord是一个用Python编写的进程管理工具,用于监控和管理Linux系统中的进程。它可以将普通的命令行进程转变为后台守护进程(daemon),并监控进程状态,在进程异常退出时自动重启。它通过fork/exec的方式把被管理的进程当作自己的子进程来启动。主要功能:进程管理:能够启动、停止、重启和关闭进程.自动重启:监控进程状态,并在进程崩溃时
ptython setup.py install 设置python包编译时的并行数
leo0308
基础知识 Python python pytorch3d
通过源码编译安装pytorch3d的时候,直接执行pythonsetup.pyinstall时,默认开的并行数很多,有10几个,直接导致机器卡死。通过设置下面的环境变量,可以设置较小的并行数,避免占用过多的资源。exportMAX_JOBS=4设置后,同时只有4个编译的进程。
python 自动化数据提取之正则表达式_python 正则提取(2)
m0_60607245
程序员 python 学习 面试
一、Python所有方向的学习路线Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。二、Python必备开发工具工具都帮大家整理好了,安装就可直接上手!三、最新Python学习笔记当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理
GUI编程(window系统→Linux系统)
诚信爱国敬业友善
心得 linux python gui
最近有个项目需要将windows系统的程序往Linux系统上面移植,由于之前程序没有考虑过多平台兼容的问题,导致部分功能不可用以下是对近期遇到的问题的总结,以及相应的解决方案和经验分享。1.Python模块安装与管理在Linux系统中,安装和管理Python模块时可能会遇到权限问题或依赖冲突。安装模块:使用pip安装模块时,建议使用--user选项,避免需要管理员权限:bash复制pipinsta
spring boot基于知识图谱的阿克苏市旅游管理系统python-计算机毕业设计
QQ1963288475
spring boot 知识图谱 旅游 python vue.js django flask
目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具IntelliJIDEAx64,因为该开发工具,内嵌了Tomcat服务运行机制,可不用单独下载Tomcatserver服务器。由于考虑到
Python从0到100(三十九):数据提取之正则(文末免费送书)
是Dream呀
python mysql 开发语言
前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新
Python学习心得两大编程思想
lifegoesonwjl
python 开发语言 pycharm 前端 c语言
一、两大编程思想:1.面向过程:功能上的封装典型代表:C语言2.面向对象:属性和行为上的封装典型代表:Python、Java二、面向过程与面向对象的异同点:1.区别:面向过程:事物比较简单,可用线性的思维去解决面向对象:事务比较复杂,使用简单的线性思维无法解决2.共同点:(1)面向过程和面向对象都是解决实际问题的一种思维方式;(2)二者相辅相成,并不是对立的;(3)解决复杂问题,通过面向对象方式便
Linux升级Anacodna并配置jupyterLab
伪_装
环境部署 linux 服务器 Anaconda python jupyter
在使用Anaconda的过程中,随着项目和需求的发展,可能需要升级Anaconda的Base环境中的Python版本。本文将详细介绍如何安全地进行升级,包括步骤、代码示例与最终流程图。升级Python一、环境准备在进行任何升级之前,建议先检查当前的Python版本以及各个库的兼容性。我们可以通过以下命令检查当前的Python版本:condainfo你会看到类似以下的输出,其中包含了当前Python
【Linux】删除Conda虚拟环境
不是伍壹
Linux linux conda 运维
1、查看当前系统的conda虚拟环境condainfo--envscondaenvlist2、创建虚拟的环境condacreate-n(你的环境名字)python=(你需要的版本号,如(3.7,3.8,3.10))3、查看安装了哪些包condalist4、删除虚拟环境condaremove-nname--all5、删除虚拟环境中的包condaremove--name$(需要删除的环境名字)$(需要
动态规划之背包问题--python版本
我是小码搬运工
# python基础 动态规划 背包问题 python版本
动态规划之背包问题–python版本问题已知一个最大量的背包,给定一组给定固定价值和固定体积的物品,求在不超过最大值的前提下,能放入背包中的最大总价值。解题思路该问题是典型的动态规划问题,分为三种不同的类型(0-1背包问题、完全背包和多重背包问题)解题关键–状态转移表达式:B(k,C)=max(B(k−1,C),B(k−1,C−ci)+vi)B(k,C)=max(B(k-1,C),B(k-1,C-
Centos7 搭建 Jupyter + Nginx 服务
某龙兄
python nginx linux centos
JupyterNotebook(此前被称为IPythonnotebook)是一个交互式笔记本,支持运行40多种编程语言。JupyterNotebook的本质是一个Web应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和markdown。用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等。本文讲述如何搭建Jupyter+Nginx服务,仅供学习与交流,请勿用于商业用途一
解读Servlet原理篇二---GenericServlet与HttpServlet
周凡杨
java HttpServlet 源理 GenericService 源码
在上一篇《解读Servlet原理篇一》中提到,要实现javax.servlet.Servlet接口(即写自己的Servlet应用),你可以写一个继承自javax.servlet.GenericServletr的generic Servlet ,也可以写一个继承自java.servlet.http.HttpServlet的HTTP Servlet(这就是为什么我们自定义的Servlet通常是exte
MySQL性能优化
bijian1013
数据库 mysql
性能优化是通过某些有效的方法来提高MySQL的运行速度,减少占用的磁盘空间。性能优化包含很多方面,例如优化查询速度,优化更新速度和优化MySQL服务器等。本文介绍方法的主要有:
a.优化查询
b.优化数据库结构
ThreadPool定时重试
dai_lm
java ThreadPool thread timer timertask
项目需要当某事件触发时,执行http请求任务,失败时需要有重试机制,并根据失败次数的增加,重试间隔也相应增加,任务可能并发。
由于是耗时任务,首先考虑的就是用线程来实现,并且为了节约资源,因而选择线程池。
为了解决不定间隔的重试,选择Timer和TimerTask来完成
package threadpool;
public class ThreadPoolTest {
Oracle 查看数据库的连接情况
周凡杨
sql oracle 连接
首先要说的是,不同版本数据库提供的系统表会有不同,你可以根据数据字典查看该版本数据库所提供的表。
select * from dict where table_name like '%SESSION%';
就可以查出一些表,然后根据这些表就可以获得会话信息
select sid,serial#,status,username,schemaname,osuser,terminal,ma
类的继承
朱辉辉33
java
类的继承可以提高代码的重用行,减少冗余代码;还能提高代码的扩展性。Java继承的关键字是extends
格式:public class 类名(子类)extends 类名(父类){ }
子类可以继承到父类所有的属性和普通方法,但不能继承构造方法。且子类可以直接使用父类的public和
protected属性,但要使用private属性仍需通过调用。
子类的方法可以重写,但必须和父类的返回值类
android 悬浮窗特效
肆无忌惮_
android
最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画。但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处。效果图如下:
一开始考虑用自定义View来做。后来发现开线程让其移动很卡,ListView+动画也没法精确定位到目标点。
后来想利用Dialog的dismiss动画来完成。
自定义一个Dialog后,在styl
hadoop伪分布式搭建
林鹤霄
hadoop
要修改4个文件 1: vim hadoop-env.sh 第九行 2: vim core-site.xml <configuration> &n
gdb调试命令
aigo
gdb
原文:http://blog.csdn.net/hanchaoman/article/details/5517362
一、GDB常用命令简介
r run 运行.程序还没有运行前使用 c cuntinue 
Socket编程的HelloWorld实例
alleni123
socket
public class Client
{
public static void main(String[] args)
{
Client c=new Client();
c.receiveMessage();
}
public void receiveMessage(){
Socket s=null;
BufferedRea
线程同步和异步
百合不是茶
线程同步 异步
多线程和同步 : 如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法
多线程和异步:多线程可以做不同的事情,涉及到线程通知
&
JSP中文乱码分析
bijian1013
java jsp 中文乱码
在JSP的开发过程中,经常出现中文乱码的问题。
首先了解一下Java中文问题的由来:
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,
js实现页面跳转重定向的几种方式
bijian1013
JavaScript 重定向
js实现页面跳转重定向有如下几种方式:
一.window.location.href
<script language="javascript"type="text/javascript">
window.location.href="http://www.baidu.c
【Struts2三】Struts2 Action转发类型
bit1129
struts2
在【Struts2一】 Struts Hello World http://bit1129.iteye.com/blog/2109365中配置了一个简单的Action,配置如下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configurat
【HBase十一】Java API操作HBase
bit1129
hbase
Admin类的主要方法注释:
1. 创建表
/**
* Creates a new table. Synchronous operation.
*
* @param desc table descriptor for table
* @throws IllegalArgumentException if the table name is res
nginx gzip
ronin47
nginx gzip
Nginx GZip 压缩
Nginx GZip 模块文档详见:http://wiki.nginx.org/HttpGzipModule
常用配置片段如下:
gzip on; gzip_comp_level 2; # 压缩比例,比例越大,压缩时间越长。默认是1 gzip_types text/css text/javascript; # 哪些文件可以被压缩 gzip_disable &q
java-7.微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1 , h2 ,判断这俩个链表是否相交
bylijinnan
java
public class LinkListTest {
/**
* we deal with two main missions:
*
* A.
* 1.we create two joined-List(both have no loop)
* 2.whether list1 and list2 join
* 3.print the join
Spring源码学习-JdbcTemplate batchUpdate批量操作
bylijinnan
java spring
Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造和封装
JDBC的batch操作:
String sql = "INSERT INTO CUSTOMER " +
"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
[JWFD开源工作流]大规模拓扑矩阵存储结构最新进展
comsci
工作流
生成和创建类已经完成,构造一个100万个元素的矩阵模型,存储空间只有11M大,请大家参考我在博客园上面的文档"构造下一代工作流存储结构的尝试",更加相信的设计和代码将陆续推出.........
竞争对手的能力也很强.......,我相信..你们一定能够先于我们推出大规模拓扑扫描和分析系统的....
base64编码和url编码
cuityang
base64 url
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
web应用集群Session保持
dalan_123
session
关于使用 memcached 或redis 存储 session ,以及使用 terracotta 服务器共享。建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,不只是缓存 session,还可以做其他用途,一举几得啊。1、使用 filter 方法存储这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简
Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']
dcj3sjt126com
数据库
public function getMinLimit () { $sql = "..."; $result = yii::app()->db->createCo
solr StatsComponent(聚合统计)
eksliang
solr聚合查询 solr stats
StatsComponent
转载请出自出处:http://eksliang.iteye.com/blog/2169134
http://eksliang.iteye.com/ 一、概述
Solr可以利用StatsComponent 实现数据库的聚合统计查询,也就是min、max、avg、count、sum的功能
二、参数
百度一道面试题
greemranqq
位运算 百度面试 寻找奇数算法 bitmap 算法
那天看朋友提了一个百度面试的题目:怎么找出{1,1,2,3,3,4,4,4,5,5,5,5} 找出出现次数为奇数的数字.
我这里复制的是原话,当然顺序是不一定的,很多拿到题目第一反应就是用map,当然可以解决,但是效率不高。
还有人觉得应该用算法xxx,我是没想到用啥算法好...!
还有觉得应该先排序...
还有觉
Spring之在开发中使用SpringJDBC
ihuning
spring
在实际开发中使用SpringJDBC有两种方式:
1. 在Dao中添加属性JdbcTemplate并用Spring注入;
JdbcTemplate类被设计成为线程安全的,所以可以在IOC 容器中声明它的单个实例,并将这个实例注入到所有的 DAO 实例中。JdbcTemplate也利用了Java 1.5 的特定(自动装箱,泛型,可变长度
JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节
justjavac
json
2013年5月,Yehuda Katz 完成了JSON API(英文,中文) 技术规范的初稿。事情就发生在 RailsConf 之后,在那次会议上他和 Steve Klabnik 就 JSON 雏形的技术细节相聊甚欢。在沟通单一 Rails 服务器库—— ActiveModel::Serializers 和单一 JavaScript 客户端库——&
网站项目建设流程概述
macroli
工作
一.概念
网站项目管理就是根据特定的规范、在预算范围内、按时完成的网站开发任务。
二.需求分析
项目立项
我们接到客户的业务咨询,经过双方不断的接洽和了解,并通过基本的可行性讨论够,初步达成制作协议,这时就需要将项目立项。较好的做法是成立一个专门的项目小组,小组成员包括:项目经理,网页设计,程序员,测试员,编辑/文档等必须人员。项目实行项目经理制。
客户的需求说明书
第一步是需
AngularJs 三目运算 表达式判断
qiaolevip
每天进步一点点 学习永无止境 众观千象 AngularJS
事件回顾:由于需要修改同一个模板,里面包含2个不同的内容,第一个里面使用的时间差和第二个里面名称不一样,其他过滤器,内容都大同小异。希望杜绝If这样比较傻的来判断if-show or not,继续追究其源码。
var b = "{{",
a = "}}";
this.startSymbol = function(a) {
Spark算子:统计RDD分区中的元素及数量
superlxw1234
spark spark算子 Spark RDD分区元素
关键字:Spark算子、Spark RDD分区、Spark RDD分区元素数量
Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Block数。
可以利用RDD的mapPartitionsWithInd
Spring 3.2.x将于2016年12月31日停止支持
wiselyman
Spring 3
Spring 团队公布在2016年12月31日停止对Spring Framework 3.2.x(包含tomcat 6.x)的支持。在此之前spring团队将持续发布3.2.x的维护版本。
请大家及时准备及时升级到Spring
fis纯前端解决方案fis-pure
zccst
JavaScript
作者:zccst
FIS通过插件扩展可以完美的支持模块化的前端开发方案,我们通过FIS的二次封装能力,封装了一个功能完备的纯前端模块化方案pure。
1,fis-pure的安装
$ fis install -g fis-pure
$ pure -v
0.1.4
2,下载demo到本地
git clone https://github.com/hefangshi/f