环境 :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 潮流周刊#84:2024 年 Python 的最佳实践(摘要)
python
本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,全文2200字。以下是本期摘要:文章&教程①现代Python开发的良好实践②2024年最先进的Python③回顾一年:2024年的Flask④介绍Annotate
Python基于matplotlib-scalebar库绘制比例尺
懒大王爱吃狼
python python matplotlib 开发语言 自动化 Python基础 opencv
在Python中,你可以使用matplotlib-scalebar库来在图表上绘制比例尺。这个库是matplotlib的一个扩展,专门用于在绘图时添加比例尺。以下是一个简单的示例,展示了如何使用matplotlib-scalebar来绘制带有比例尺的图表。首先,你需要安装matplotlib-scalebar库。如果你还没有安装它,可以使用以下命令来安装:pipinstallmatplotlib-
Python 潮流周刊#77:Python 依赖管理就像垃圾场火灾?(摘要)
python
本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,2则热门讨论,全文2200字。以下是本期摘要:文章&教程①Python依赖管理一种垃圾场火灾②Python的膨胀:精细的项目间依赖关系分析③分享我的Django项
Python 潮流周刊#74:创下吉尼斯世界记录的 Python 编程课(摘要)
python
本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。本期分享了12篇文章,12个开源项目,2则音视频,全文2300字。好消息:即日起至万圣节(12.31),周刊限时99元/年,欢迎订阅!!以下是本期摘要:文章&教程①创下吉尼斯世界记录的Python
Python 潮流周刊#71:PyPI 应该摆脱掉它的赞助依赖(摘要)
python
本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,1则音视频,全文2000字。以下是本期摘要:文章&教程①PyPI应该摆脱掉它的赞助依赖②创建不分大小写的Python字符串类③用Tree-sitter&Jedi重
Python 潮流周刊#72:Python 3.13.0 最终版已发布!(摘要)
python
本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了14篇文章,12个开源项目,4则音视频,全文2300字。以下是本期摘要:文章&教程①Python3.13.0最终版已发布!②关于Python3.13,了解这些信息就够了③Python3.13
Python 潮流周刊#67:uv 的重磅更新(摘要)
python
本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,全文2000字。以下是本期摘要:文章&教程①uv:统一的Python打包工具②PyJWT和python-jose在处理JWT令牌时的差异③Kindle+Pytho
Python 潮流周刊#68:2023 年 Python 开发者调查结果(摘要)
python
本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,2则热门讨论,全文2100字。以下是本期摘要:文章&教程①2023年Python开发者调查结果②为什么在Docker中我仍然要用Python虚拟环境?③我如何用P
Python WebSocket服务器介绍
一只会写程序的猫
Python python websocket 服务器
PythonWebSocket服务器介绍WebSocket是一种在Web浏览器和服务器之间实现全双工通信的协议。它允许服务器主动发送消息到浏览器,而不需要浏览器发起请求。Python提供了许多库和框架来实现WebSocket服务器,本文将介绍如何使用Python构建一个简单的WebSocket服务器。WebSocket协议和工作原理WebSocket协议是通过HTTP协议的升级实现的。在HTTP协
python如何读取csv文件?
gaogsf
Python python 开发语言
CSV(CommaSeparatedValues)文件是一种常见的文件格式,它将数据以逗号分隔的形式存储,通常用于存储表格数据。在Python中,我们可以使用多种方法来读取CSV文件,本文将从多个角度分析Python如何读取CSV文件。一、Python内置的csv库Python内置了csv库,可以使用该库中的reader对象来读取CSV文件。下面是一个示例代码:importcsvwithopen(
探索装饰器的奥秘:Python里的超级英雄披风
大梦百万秋
知识学爆 python 开发语言
引言:每一行代码都可以是一件披风有没有想过,代码写得再帅气,读起来再优雅,它始终是千篇一律的套路?有时候,代码中的函数就像是穿着普通衣服的路人,默默地完成任务。而这时候,你可能会想:“嘿,我要给它们一点魔法,让它们更具超能力!”别担心,Python里的装饰器正是你需要的神秘工具,它能给你的函数加上一件“超级英雄披风”,让它们瞬间拥有更多的功能,且不改变它们原本的外貌。今天我们就来一起揭开装饰器的面
在 Python 中使用 PyPDF2 向 PDF 文件批量添加水印
信息科技云课堂
python pdf
目录:使用PyPDF2添加水印到PDF文件批量添加水印到PDF文件所有页PDF文件广泛用于不同的设备和平台上,在某些情况下,可能需要在PDF文件中申明版权,需要将水印、条形码、二维码等添加到PDF中。PyPDF2提供了一种将另一个PDF文件作为水印,添加到PDF文件的方法。在下面的示例中,制作一个PDF水印文档,可以加入文字、二维码,通过合并的方法为PDF文件添加水印。使用PyPDF2添加水印到P
Python 潮流周刊#86:Jupyter Notebook 智能编码助手(摘要)
python
本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,全文2000字。以下是本期摘要:文章&教程①介绍JupyterNotebook智能助手②用纯Python写一个“Redis”,速度比原生Redis还快?③30分钟
Python 中最易误解的功能
前端
有些功能即使是经验丰富的开发者也会被难住。我也曾被它们绊倒,花数小时挠头苦思,最终才学会如何正确应对。所以,不浪费时间,让我们来探索Python中最易误解的功能,它们为何棘手,以及你如何能最终掌握它们。1.可变默认参数问题:如果你曾写过一个带有默认列表或字典参数的函数,你可能会注意到一些奇怪的现象。它会在函数调用之间“记住”值!defadd_item(item,items=[]):items.ap
python注册nacos服务
MTonj
Python python 开发语言
根据nacosopenapiOpenAPI指南主要是实现以下接口:创建服务注册实例注销实例删除服务发送实例心跳实现demo如下:一个web服务1http_server1.py#coding:utf-8importsocketfrommultiprocessingimportProcessdefhandle_client(client_socket):"""处理客户端请求"""request_dat
用Python进行websocket接口测试
代码小念
软件测试 自动化测试 技术分享 python websocket 开发语言
这篇文章主要介绍了用Python进行websocket接口测试,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下我们在做接口测试时,除了常见的http接口,还有一种比较多见,就是socket接口,今天讲解下怎么用Python进行websocket接口测试。SocketSocket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可
使用 Python 实现 WebSocket 服务器与客户端通信
又蓝
python websocket
简介WebSocket是一种基于TCP协议的通信协议,能够在客户端与服务器之间进行全双工(双向)通信。相比传统的HTTP协议,WebSocket可以实现实时数据的传输,尤其适合需要实时交互的应用场景,如在线游戏、实时聊天、金融交易等。我通过Python实现一个简单的WebSocket服务器,并使其与客户端进行通信。我们将创建两个Python文件:websocket.py和main.py,webso
基于Python实现读取嵌套压缩包下的文件
袁袁袁袁满
Python实用技巧大全 python 嵌套压缩包下文件读取 Python实现嵌套压缩包 压缩包 zipfile BytesIO
文章目录前言思路完整代码代码优化前言工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,这里记录下方法,希望能帮助到更多的人。思路打开外层zip压缩包并遍历文件:使用withzipfile.ZipFile(outer_zip_path,'r')asouter_zip语句以读取模式'r'打开用户输入的外层zip压缩包对应的文件,这样在代码块结束后会自动关闭该文件,避免资源泄露。通过oute
【如何利用Python抢演唱会门票】python利用selenium实现大麦网抢票
Python小炮车
python selenium 数据库
一、selenium原理介绍Selenium是一个用于Web[应用程序](https://link.juejin.cn/?target=https%3A%2F%2Fbaike.baidu.com%2Fitem%2F%25E5%25BA%2594%25E7%2594%25A8%25E7%25A8%258B%25E5%25BA%258F%2F5985445%3FfromModule%3Dlemma_i
Python 实现七大排序算法
weixin_30527323
python shell 数据结构与算法
技术博客:github.com/yongxinz/te…本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序。先整体看一下各个算法之间的对比,然后再进行详细介绍:排序算法平均时间复杂度最好情况最坏情况空间复杂度排序方式稳定性插入排序O(n²)O(n)O(n²)O(1)In-place稳定冒泡排序O(n²)O(n)O(n²)O(1)In-place稳定选择排
Python数据分析高频面试题及答案
闲人编程
程序员面试 python 数据分析 面试题 核心
目录1.基础知识2.数据处理3.数据可视化4.机器学习模型5.进阶问题6.数据清洗与预处理7.数据转换与操作8.时间序列分析9.高级数据分析技术10.数据降维与特征选择11.模型评估与优化12.数据操作与转换13.数据筛选与分析14.数据可视化与报告15.数据统计与分析16.高级数据处理以下是一些Python数据分析的高频核心面试题及其答案,涵盖了基础知识、数据1.基础知识问1:Python中列表
Python数据分析常见面试题和答案01-10
飞翔还哈哈6
Python数据分析 python pandas 数据分析
以下是一些Python数据分析常见面试题和答案:1.Python中的list和tuple的区别是什么?答:List是可变的,而元组(tuple)是不可变的。因此,使用list来存储需要频繁修改的数据,而使用元组来存储不能更改的数据项。2.解释NumPy中的数组?为什么numpy在数据分析中很重要?答:NumPy是Python中提供高性能科学计算和数据分析的包。NumPy数组是一种类似于列表的数据结
【Python小技巧】使用prettytable格式化显示dataframe数据
IT里的交易员
Python经验池 python
文章目录前言一、安装prettytable二、函数打包三、应用示例总结前言经常我们使用print(df)输出dataframe数据,打印输出的数据没有格式,看起来屏幕一篇乱。有没有一种可以格式化输出的工具?还真有,那就是prettytable。一、安装prettytablePrettyTable是Python中的一个库,用于以美观的表格形式显示数据。要使用PrettyTable,首先需要安装它,可
Python中用ollama库实现连续对话
longnershot
python 开发语言 AI编程
找来找去没找到一个简单示例,用4o和问心来回调整简单生成了一个,抛砖引玉了。importollamadefchat_with_ollama():#初始化一个列表来存储对话历史,每个元素是一个包含用户输入和模型回复的元组history=[]whileTrue:#获取用户输入,并转换为小写,方便后续判断退出条件user_input=input("\nUser:")#判断用户是否想要退出对话ifuser
Python电子书教程汇总
iteye_3941
python
From:http://bathome.net/thread-15554-1-1.html[转载教程]Python电子书教程汇总(2012-02-16更新)简明Python教程(AByteofPython)_1.20_中文版pdfhttp://www.rayfile.com/zh-cn/files/6cdcc561-58b2-11e1-ad5e-0015c55db73d/Python语言从入门到精
深入理解观察者模式 —— Qt信号槽机制的实现
拾工
软件设计 观察者模式 qt 开发语言
观察者模式是一种行为型设计模式,允许一个对象(被观察者)状态发生变化时通知一组依赖它的对象(观察者),从而实现对象之间的解耦。在这篇文章中,我们将探讨如何用C++和Python实现观察者模式,并在代码中清晰地体现这一设计模式的核心思想。其实Qt的信号槽机制,就是借住了这一设计模式,并对其进行了一些扩展。由于Qt广泛的被C++和Python用户使用,所以这里给出Python和C++两个版本的简单实现
Python网络编程之UDP套接字编程
Ssaty.
udp 网络 python
第1关:UDP初体验任务描述本关任务:完成一个客户端程序,向服务器端发出请求,传输数据,并设置超时丢包,体验UDP的基本连接过程。相关知识为了完成本关任务,你需要掌握:创建socket对象;发送UDP数据;接收UDP数据;设置超时。创建socket对象创建socket对象是第一步,后续所有的操作都是通过socket对象完成的。创建对象使用socket()函数:s=socket(参数1,参数2)#s
使用Python访问和操作Llama的方法
起风了~~~。
python llama 人工智能 Python
使用Python访问和操作Llama的方法Llama是一个流行的Python库,用于处理和操作数据集。它提供了丰富的功能和工具,使我们能够轻松地对数据进行处理、转换和分析。本文将介绍如何使用Python来访问和使用Llama库,并提供相应的示例代码。安装Llama库首先,我们需要安装Llama库。可以使用pip命令在Python环境中安装Llama。打开终端或命令提示符,并运行以下命令:pipin
Python机器学习之XGBoost从入门到实战(基本理论说明)
雪域枫蓝
Python Atificial Intelligence 机器学习 python 分布式
Xgboost从基础到实战XGBoost:eXtremeGradientBoosting*应用机器学习领域的一个强有力的工具*GradientBootingMachines(GBM)的优化表现,快速有效—深盟分布式机器学习开源平台(DistributedmachinelearningCommunity,DMLC)的分支—DMLC也开源流行的深度学习库mxnet*GBM:Machine:机器学习模型
手把手教你使用 Python 制作贪吃蛇游戏|Python游戏
程序员CC_
Python教程 python 学python pygame python 开发语言
贪吃蛇游戏是有史以来最受欢迎的街机游戏之一。在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果。在学习Python或Pygame时,可以将创建蛇游戏视为一项挑战。这是每个新手程序员都应该接受的最好的初学者友好项目之一。学习构建视频游戏是一种有趣而有趣的学习。我们将使用Pygame来创建这个蛇游戏。Pygame是一个开源库,专为制作视频游戏而设计。它具有内置的图形和声音库。它也
解读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