环境 :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中的dict与set
“光光”
python
python内置字典:dict支持key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样取出来的时候才能根据key拿到value。由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会将前面的值覆盖掉。如果key不存在,dict就会报错要避免key不存在的错误,有两种方法:1)通过in判断key是否存在>>>d={'a':'1'}>
Python基础---Dict(字典)
grace666
Python
1.字典以键值对组成,包含在{}中,字典的键必须为hashable,即不可变(字符串、元组、数字),并且唯一;值可以是任何类型#dict1={[1]:1}#报错:TypeError:unhashabletype:'list'#dict1={{1}:1}#报错:TypeError:unhashabletype:'set'dict1={(1,):1}print(dict1)#{(1,):1}dict1
Markdown 到 PowerPoint 转换工具——md2pptx
伍盛普Silas
Markdown到PowerPoint转换工具——md2pptxmd2pptxMarkdownToPowerPointconverter项目地址:https://gitcode.com/gh_mirrors/md/md2pptxmd2pptx是一个开源项目,它可以将Markdown格式的文本转换为PowerPoint演示文稿。该项目主要使用Python编程语言实现。项目基础介绍md2pptx是一个
Python网络爬虫-WebSocket数据抓取
程序小勇
faiss 爬虫 python 网络协议 websocket 开发语言
目录前言1、WebSocket请求的分析通常涉及以下几个方面:2、利用WebSocket爬取数据总结最后,创作不易!非常感谢大家的关注、点赞、评论啦!谢谢三连哦!好人好运连连,学习进步!工作顺利哦!博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,
python 山脊图_(数据科学学习手札98)纯Python绘制满满艺术感的山脊地图
weixin_39780255
python 山脊图
1简介下面的这幅图可能很多读者朋友们都看到过,这是英国摇滚乐队JoyDivision在1979年发行的其第一张录音室专辑UnknownPleasures的封面,由艺术家PeterSaville基于射电脉冲星信号的数据图创作而成,成为了一种流行文化的符号标志。图1类似图1的风格,在地图制作中也存在着一种山脊地图,基于记录地表海拔信息的高程数据,我们可以利用水平方向上的基于实际位置海拔高度的曲线,来对
【Python 学习 / 5】函数详解(定义、参数、作用域、lambda、内置函数)
卜及中
Python基础 python 学习 开发语言
文章目录一、函数1.定义函数1.1基本函数定义1.2带参数的函数1.3带返回值的函数2.参数传递2.1位置参数2.2默认参数2.3可变参数2.3.1使用`*args`2.3.2使用`**kwargs`2.4参数的混合使用3.作用域3.1局部和全局变量3.2`global`关键字输出:3.3`nonlocal`关键字输出:4.lambda表达式4.1基本用法4.2与`map()`、`filter()
leetcode简单(181-200)python
九日火
leetcode python
762.PrimeNumberofSetBitsinBinaryRepresentation(e-181)GiventwointegersLandR,findthecountofnumbersintherange[L,R](inclusive)havingaprimenumberofsetbitsintheirbinaryrepresentation.(Recallthatthenumberofs
PaddleOCR面板恢复python脚本--针对pdf的面板恢复
zsh669
paddlepaddle ocr 百度 python pdf
问题在做一个项目的时候,使用PaddleOCR提供的模型,实现对图片或者pdf进行面板恢复,并保存为.docx文档。但是,官方的文档只提供了针对图片进行面板恢复的python脚本,没有提供pdf进行面板恢复的python脚本,官方只提供了pdf面板恢复的命令行使用方法,因此,我去看了PaddleOCR的源码,将命令行方法转换为python脚本准备工作环境配置和文档请参考:\ppstructure/
Python库 - transformers
司南锤
PYTHON库 python机器学习 python 开发语言
transformers库是由HuggingFace开发的一个非常流行的Python库,用于自然语言处理(NLP)任务。它提供了大量的预训练模型,这些模型可以用于各种NLP任务,如文本分类、问答、翻译、摘要生成等。以下是关于transformers库的详细介绍:1.主要特点预训练模型:transformers库包含了多种预训练的语言模型,如BERT、GPT、T5、XLNet等。这些模型在大规模文本
【NLP-04】tranformers库保姆级使用教程---以BERT模型为例
云天徽上
NLP bert 人工智能 深度学习 自然语言处理 机器学习 numpy 信息可视化
安装要安装一个非常轻量级的Transformers库,您可以执行以下步骤:1、打开终端或命令提示符。2、运行以下命令来安装Transformers库:pipinstalltransformers这将使用pip工具从PythonPackageIndex(PyPI)下载并安装Transformers库。请确保您的计算机上已经安装了pip。然后,您可以在Python代码中导入Transformers库:
利用 OpenCV 进行棋盘检测与透视变换
萧鼎
python基础到进阶教程 opencv 人工智能 计算机视觉
利用OpenCV进行棋盘检测与透视变换1.引言在计算机视觉领域,棋盘检测与透视变换是一个常见的任务,广泛应用于摄像机标定、文档扫描、增强现实(AR)等场景。本篇文章将详细介绍如何使用OpenCV进行棋盘检测,并通过透视变换将棋盘区域转换为一个标准的矩形图像。我们将基于一段Python代码进行分析,代码的主要任务包括:读取图像并进行预处理(灰度转换、自适应直方图均衡化、去噪)检测边缘并提取棋盘区域计
conda更换环境版本(比如torch版本)
挨打且不服66
python python
找到想要的torch版本pytorch官网torch过往的版本创建新环境condacreate--namemyenvpython=3.8condaactivatemyenvconda虚拟环境中安装CUDA和CUDNN深度学习用显卡训练的时候,需要安装与显卡对应的cuda和cudnn。但不同的项目所支持的pytorch版本是不一样的,而pytorch版本和cuda版本之间又是互相依赖的,所以如果可以
流行编程语言全解析:优势、应用与短板
a小胡哦
python java c++ c语言 javascript swift r语言
Python:优势Python以其简洁、易读的语法闻名,新手能快速上手。丰富的库和框架,能极大地提高开发效率。适用领域数据科学与分析:处理和分析大规模数据集,进行数据可视化。典型示例:Google用Python进行数据分析,处理海量数据以支持各种业务决策。机器学习与人工智能:构建和训练模型。典型示例:OpenAI在很多人工智能项目中广泛使用Python,如GPT系列模型的研发。网络爬虫:轻松从网页
用conda虚拟环境解决py+torch环境问题
SevenZS
Note anaconda python
要事先安装wheelpipinstallwheelcondainstallnb_conda安装nb_conda这样可以在shell切换虚拟环境启动jupyternotebook后切换到虚拟环境创建虚拟环境condacreate-npython36python=3.6condaactivatepython36加载后再pip安装torch1.4+cu101所有版本torch放在某个文件夹,比如桌面后p
【报错】ImportError: cannot import name ‘get_refined_artifact_map‘ from ‘basicsr.losses.loss_util‘
之群害马
python 深度学习 pytorch
ImportError:cannotimportname'get_refined_artifact_map'from'basicsr.losses.loss_util'(xxx/lib/python3.10/site-packages/basicsr/losses/loss_util.py)解决办法:找到basicsr库网站缺失的部分如下,补充到原来的xxx/lib/python3.10/site
Python 用pytorch从头写Transformer源码,一行一解释;机器翻译实例代码;Transformer源码解读与实战
医学小达人
NLP LLMs GPT 深度学习 人工智能 transformer python 机器学习
1.Transformer简介Transformer模型被提出的主要动机是解决序列处理任务的长距离依赖问题。传统的RNN和LSTM虽然能够处理序列任务,但因为它们在处理序列时需要一步步前进,因此其他信息无法立即对其产生影响,当序列变长时,长距离依赖的信息很可能会被丢失。为了解决这个问题,Transformer模型被设计出来,内核思想是利用自注意力机制,这样模型可以直接对输入序列的任意两个位置建立直
python正则表达式快速入门_Python 正则表达式入门
weixin_39955938
python正则表达式快速入门
本文主要为没有使用正则表达式经验的新手入门所写。转载请写明出处引子首先说正则表达式是什么?正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那
python正则表达式必知必会的基础
豆子前端
python基础 python 正则表达式
文章目录正则表达式re.match()和re.search()SRE_Matchobjectre.match()re.search()(重点)re.flags小结re.sub()re.split()re.findall()re.fullmatch()re.compile()小结方法分类注意细节正则表达式网站参考资料正则表达式本文主要讲的是正则表达式在python中的简单使用,只介绍关键的几个方法函
在conda虚拟环境中安装jupyter lab-----deepseek问答记录
溯源006
deepseek回答记录 conda jupyter ide
在Conda虚拟环境中安装JupyterLab的步骤如下:1.创建并激活Conda虚拟环境如果你还没有创建虚拟环境,可以使用以下命令创建一个新的虚拟环境并激活它:condacreate-nmyenvpython=3.x#将`myenv`替换为你的环境名称,`3.x`替换为所需的Python版本condaactivatemyenv2.安装JupyterLab在激活的虚拟环境中,使用以下命令安装Jup
单片机、嵌入式Linux开发大学自学路径
Oriental Son
嵌入式 MCU 单片机 单片机 学习 stm32 mcu linux
笔者所修读的专业为物联网工程,物联网工程是一门新兴的、热门的专业,其所涉及的学科更是又多又杂,既有计算机方向的编程语言(如C、C++、Java、Python等)、数据结构与算法、操作系统、移动端应用开发、机器学习等;软硬结合的方向有数字电路单片机开发、嵌入式Linux开发等;硬件、电路方向有电路分析、数字电路、模拟电路、传感器原理、RFID、FPGA开发等;涉及信号处理的有信号与系统、通信原理等。
深入解析 Poetry:Python 项目依赖管理的新宠,安装、使用及最佳实践
潘智祥
python java 人工智能
在Python的世界里,管理项目依赖和虚拟环境一直是一个令人头疼的问题。虽然有pip和virtualenv这样的工具,但随着项目的复杂性增加,它们的局限性也逐渐显露出来。这时候,Poetry作为一个现代化的依赖管理工具应运而生。它不仅解决了项目依赖管理的问题,同时也集成了虚拟环境管理、发布等功能,成为了Python开发者的新宠。Poetry是什么?Poetry是一个用于管理Python项目依赖和构
【JAVA工程师从0开始学AI】,第二步:从强类型到动态语言:Java工程师的Python语法避坑指南
架构默片
JAVA工程师从0开始学AI python java windows
这是一篇介绍Python语法与JAVA语法区别文章,让我们以对比的方式,来学习一下Python的语法。首先我们看一下下面的Python代码,和具体在java当中分别代表了什么意思numbers=[1,2,3,4,5,6,7,8,9]#①创建数字列表(像Java的ArrayList,但不用写泛型)odd_numbers=[]#②准备装奇数的空列表(类似Java的newArrayListnumbers
052_爬虫_爬虫相关概念(引用《尚硅谷Python爬虫教程(小)小 白零基础速通》052章)
一个有趣的昵称
python 爬虫 开发语言
爬虫解释:通过程序,根据url(http://taobao.com)进行网页的爬取获取有用的信息实用程序模拟浏览器,去向服务发送请求,获取响应信息爬虫的核心爬取网页:爬取整个网页包含了网页中所的内容解析数据:将网页中得到的数据进行解析难点:爬虫和但爬虫之间的博弈爬虫的类型实例通用爬虫百度,360,Google,搜狗等搜索引擎功能访问网页-》抓取数据-》数据储存-》数据处理-》提供检索服务robot
为一位经验丰富的程序员量身定制Python学习路线 人工智能首选语言:python Python新技术
小黄人软件
chatGPT python 学习 人工智能
人工智能首选语言:python必学。解释型语言(无编译这个环节),直接执行代码,面向对象,脚本语言没基础在这里学为一位经验丰富的程序员量身定制Python学习路线,主要应关注于深化已有的编程知识和技能,并探索Python特有的高级特性。以下是推荐的学习路线:基础复习:如果对Python基础不熟悉,先从Python的基础语法、数据类型、控制流程等开始复习。高级语言特性:深入理解装饰器、上下文管理器、
强化学习:原理、概念与代码实践
AndrewHZ
深度学习新浪潮 人工智能 深度学习 强化学习 机器学习 算法 deepseek
一、引言强化学习(ReinforcementLearning)作为机器学习的一个重要分支,旨在通过智能体(agent)与环境的交互,学习到最优的行为策略,以最大化长期累积奖励。它在机器人控制、游戏、自动驾驶、资源管理等众多领域都取得了显著的成功。本文将深入介绍强化学习的数学原理、核心概念,并通过公式推导来加深理解,同时结合一个具体的实例,使用Python语言进行代码实现,帮助读者全面掌握强化学习的
【Python基础】Python闭包:如何让你的代码拥有‘读心术’?
陈序不懂程序
python 服务器 apache 网络 开发语言 数据库 学习
第1章闭包概念与背景1.1闭包定义与理论基础闭包,这一术语源自数学逻辑,如今在计算机科学中占据着核心地位,尤其在面向对象和函数式编程领域中发挥着无可替代的作用。它是一种特殊的函数对象,不仅包含自身的代码逻辑,还携带着其定义时所处环境的部分状态,即对外部自由变量的引用。这种独特的“携带状态”特性赋予了闭包强大的功能和灵活性,使其成为实现抽象、封装、数据隐藏以及控制程序执行的关键工具。1.1.1闭包的
python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理
Scikit-learn
机器学习 python 算法 python 学习 开发语言
SIGIA_4Ppython学习列表字典集合面对对象编程闭包装饰器函数式编程作用域异常处理本文连接简介SIGIA_4P网址a.课程OKRObjectivesandKeyResults即目标与关键成果法目标,Objectives:掌握AI领域的Python开发成果1KR1linux目录结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r864ykpN-16917885
尚硅谷爬虫note007
CSDNy666999
爬虫
一、urllib—异常1.urllib.error.HTTPError2.urllib.error.URLError#_*_coding:utf-8_*_#@Time:2025/2/1411:33#@Author:20250206-里奥#@File:demo26_异常#@Project:PythonProject10-14importurllib.requestimporturllib.error
【JAVA工程师从0开始学AI】,第四步:闭包与高阶函数——用Python的“魔法函数“重构Java思维
架构默片
JAVA工程师从0开始学AI 人工智能 java python
副标题:当严谨的Java遇上"七十二变"的Python函数式编程历经变量战争、语法迷雾、函数对决,此刻我们将踏入Python最迷人的领域——函数式编程。当Java工程师还在用接口和匿名类实现回调时,Python的闭包已化身"智能机器人",带着"记忆传承"的能力自由穿梭于代码之间。这里没有类的枷锁,函数既是武器又是盾牌,高阶函数组合出的"代码万花筒",正是AI数据处理、模型训练的核心密码。本文将用J
【蓝桥杯集训·每日一题2025】 AcWing 6122. 农夫约翰的奶酪块 python
查理零世
蓝桥杯 python 算法
Week12月17日农夫约翰的奶酪块农夫约翰有一块立方体形状的奶酪,它位于三维坐标空间中,从(0,0,0)(0,0,0)(0,0,0)延伸至(N,N,N)(N,N,N)(N,N,N)。农夫约翰将对他的奶酪块执行一系列QQQ次更新操作。对于每次更新操作,农夫约翰将从整数坐标(x,y,z)(x,y,z)(x,y,z)到(x+1,y+1,z+1)(x+1,y+1,z+1)(x+1,y+1,z+1)处切割
解读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