Cookie,Session,正则表达式
一、Cookie和Session基础知识
Cookie:客户端本地存储的键值对
Http访问是不记录状态的,所以要借助session和cookie来保存访问状态
当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来。当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你。 Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie来辨认使用者,以方便送出使用者量身定做的内容,像是 Web 接口的免费 email 网站,都要用到 Cookie。
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保
持状态的方案。
cookie 和session 的区别:
1. cookie数据存放在客户的浏览器上,session数据放在服务器上。
2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,
考 虑到安全应当使用session。
3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性 能,
考虑到减轻服务器性能方面,应当使用COOKIE。
4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个 cookie。
5. 个人建议:将登陆信息等重要信息存放为SESSION。
其他信息如果需要保留,可以放在COOKIE中
session的生命周期
Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
Session什么时候失效?
1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。
Tomcat中Session的默认失效时间为20分钟。
2.调用Session的invalidate方法。
对象及方法
1) 以键值对的格式写session。
request.session['键']=值
2) 根据键读取值。
request.session.get('键', 默认值)
3)清除所有session,在存储中删除值部分。
request.session.clear()
4)清除session数据,在存储中删除session的整条数据。
request.session.flush()
5)删除session中的指定键及值,在存储中只删除某个键及对应的值。
del request.session['键']
6)设置会话的超时时间,如果没有指定过期时间则两个星期后过期。
request.session.set_expiry(value)
如果value是一个整数,会话的session_id cookie 将在value秒没有活动后过期。
如果value为0,那么用户会话的session_id cookie 将在用户的浏览器关闭时过期。
如果value为None,那么会话的session_id cookie 两周之后过期。
二、正则表达式
爬虫一共就四个主要步骤:
1. 明确目标 (要知道你准备在哪个范围或者网站去搜索)
2. 爬 (将所有的网站的内容全部爬下来)
3. 取 (去掉对我们没用处的数据),运用正则表达式
4. 处理数据(按照我们想要的方式存储和使用)
什么是正则表达式?
正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些
特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是由普通字符和特殊字符(元字符)组成的文章模式
常见的元字符:
前面提到的元字符\b表示匹配单词的开始和结束。引出其他元字符
源字符 | 含义 |
. |
匹配除换行符以外的任意一个字符 |
^ |
匹配行首 |
$ |
匹配行尾 |
? |
重复匹配0次或1次 |
* |
重复匹配0次或更多次 |
+ |
重复匹配1次或更多次 |
{n,} |
重复n次或更多次 |
{n,m} |
重复n~m次 |
[a-z] |
任意字符 |
[abc] |
a/b/c中的任意一个字符 |
{n} |
重复n次 |
\b |
匹配单词的开始和结束 |
\d |
匹配数字 |
\w |
匹配字母,数字,下划线 |
\s |
匹配任意空白,包括空格,制表符(Tab),换行符 |
\W |
匹配任意不是字母,数字,下划线的字符 |
\S |
匹配任意不是空白符的字符 |
\D |
匹配任意非数字的字符 |
\B |
匹配不是单词开始和结束的位置 |
[^a] |
匹配除了a以外的任意字符 |
[^(123|abc)] |
匹配除了123或者abc这几个字符以外的任意字符 |
1、re模块
import re # 在前面加上一个r, 可以避免字符转义,输出原字符
str1 = r'c:\a\b\c' print(str1) # \\表示输出特殊字符的原字符\
str2 = 'c:\\a\\b\\c' print(str2) str3 = r'c:\\a\\b\c' print(str3)
2、compile函数:compile 函数用于编译正则表达式,生成一个 Pattern 对象
import re # 查找连续的数字 pattern = re.compile(r'\d+')
str1 = pattern.findall('hello 12345 678') print(str1)
# >>>['', ''] # 后面的参数是规定文本范围 str2 = pattern.findall('one1two2three3', , ) print(str2)
# >>>['', '']
3、findall方法:全部匹配,返回列表
格式:findall(string[,pos[,endpos]])
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终
点位置,默认值分别是 0 和 len (字符串长度)。
import re # 测试小例子 compile把正则表达式字符串编译成pattern(变量)对象
# 正则表达式中有转义字符串需要添加前缀r pattern = re.compile(r'\bwe\b') # 使用pattern对象查找文本中的数据
# findall表示全局查找匹配 返回列表 str1 = pattern.findall('we are work well') print(str1) >>>[''we]
4、match方法:从起始位置开始查找,一次匹配
格式:match(string[,pos[,endpos]])
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点
位置,默认值分别是 0 和 len (字符串长度)。因此,当你不指定 pos 和 endpos 时,
match 方法默认匹配字符串的头部。
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
import re pattern = re.compile(r'\d+') # 因为match是从开始匹配,如果开始匹配不到则返回None str1 = pattern.match('one1two2') print(str1)
# >>>None str2 = pattern.match('one13579two2', , ) print(str2)
# >>>None str3 = pattern.match('one13579two2', , ) print(type(str3), str3)
# >>><class '_sre.SRE_Match'> <_sre.SRE_Match object; span=(, ), match=''> # 将match匹配到的内容 使用group从中拿出来 print(str3.group())
# >>>
# 获取字符串的开始位置、结束位置
print(str3.start()) # >>>
print(str3.end()) #>>>
print(str3.span()) #>>>(, )
5、search方法:从任何位置开始查找,一次匹配
格式:search(string[,pos[,endpos]])
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点
位置,默认值分别是 0 和 len (字符串长度)。
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
import re pattern = re.compile(r'\d+')
str1 = pattern.search('one1two2three34four') print(str1,type(str1))
# >>><_sre.SRE_Match object; span=(, ), match=''> <class '_sre.SRE_Match'>
print(str1.group())
# >>> str2 = pattern.search('one12twothree34four', , ) print(str2, type(str2))
# >>><_sre.SRE_Match object; span=(, ), match=''> <class '_sre.SRE_Match'>
print(str2.group())
# >>>
6、finditer方法:全部匹配,返回迭代器
finditer 方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。
但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。
import re pattern = re.compile(r'\d+') # 使用finditer进行查找 返回的是迭代器 result_iter = pattern.finditer('hello 123456 789') print(result_iter, type(result_iter))
# >>><callable_iterator object at 0x0000017C5FC781D0> <class 'callable_iterator'> # 使用遍历拿出获取到的迭代器数据 for ml in result_iter:
print(ml.group())
7、split方法:分割字符串,返回列表
格式:split(string[,maxsplit])
split 方法按照能够匹配的子串将字符串分割后返回列表,其中,maxsplit 用于指定最大
分割次数,不指定将全部分割。
import re pattern = re.compile(r'[\s\,\;]+') # 将字符串文本按指定的字符进行分割 返回列表 str1 = pattern.split('a,b;;c d') print(str1)
# >>>['a', 'b', 'c', 'd']
8、sub方法:替换
import re pattern = re.compile(r'(\w+) (\w+)') # 声明需要替换的字符串 str1 = 'hello 123, hello 456' # 匹配并且替换匹配到的字符 str2 = pattern.sub('hello world', str1) print(str2)
# >>>hello world, hello world
9、[u4e00-u9fa5]:匹配中文
在某些情况下,我们想匹配文本中的汉字,有一点需要注意的是,中文的 unicode 编码范围
主要在 [u4e00-u9fa5],这里说主要是因为这个范围并不完整,比如没有包括全角(中文)
标点,不过,在大部分情况下,应该是够用的。
# 匹配中文 pattern = re.compile(r'[\u4e00-\u9fa5]+') # str1 = pattern.findall(str1) # print(str1)
# >>>['世界', '你好'] str2 = pattern.finditer(str1) for i in str2:
print(i.group())
Cookie,Session,正则表达式的更多相关文章
- cookie,session,sessionid
cookie,session,sessionid http协议是无状态的,意思是每次请求的状态不会保存.因此,产生了cookie,session之类保存会话状态的机制.1.什么是cookiecooki ...
- Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期
servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...
- 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法
单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...
- 会话Cookie及session的关系(Cookie & Session)
会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...
- cookie,session,token的定义及区别
参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...
- Java web学习 Cookie&&Session
cookie&&session 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会 话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Coo ...
- Cookie&Session(会话技术)
一.Cookie技术 从打开一个游览器访问某个站点,到关闭这个游览器的整个过程成为一次会话 会话技术分为Cookie和Session Cookie:数据存储在客服端本地,减少对服务端的存储的压力,安全 ...
- Cookie Session和自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- python Cookie Session 相关用法
Cookie一.前言1.http协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响 应情况直接影响,也不会直接影响后面的请 ...
- django - 总结 - cookie|session
Cookie是通过HTTP请求和响应头在客户端和服务器端传递的. 在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术. --------------------- ...
随机推荐
- VueI18n的应用
.npm install vue-i18n .在 main.js 中引入 vue-i18n import VueI18n from 'vue-i18n' Vue.use(VueI18n) .在main ...
- ORM之视图层
1.request对象 前台POST传来的数据,包装到POST字典中request.POST 前台浏览器窗口携带的数据,包装到GET字典中request.GET 前台请求的方式,request.met ...
- api-gateway-engine知识点(1)
1 密钥绑定时,通过Channel 实现监控 后台发送数据 : redisTemplate.convertAndSend(RedisMessageChannel.API_GATEWA ...
- Elasticsearch6.13 升级6.24 单节点停机升级
Elasticsearch6.x 升级6.y 是支持滚动升级的,目前我们测试环境只有一个节点只能停机升级了 准备工作 禁用分片分配 curl -X PUT "localhost:9200/_ ...
- android studio 设置安装不占用C盘
我们知道,android studio 安装会占用大量的空间,比如我们我们将andriod status 安装到了D:\IDE\Android Studio这里,但是你会发现,在编译出包过程中,C盘的 ...
- async和await用法(Task)
原文:async和await用法 要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await, ...
- Please add or free up more resources then turn off safe mode manually.
解决方案:硬盘满了,释放硬盘空间.
- python模拟艺龙网登录带验证码输入
1.使用urllib与urllib2包 2.使用cookielib自动管理cookie 3.360浏览器F12抓信息 登录请求地址和验证码地址都拿到了如图 # -*- coding: utf-8 -* ...
- ANTLR4权威指南 - 第5章 设计语法
在第I部分,我们熟悉了ANTLR,并在一个比较高的层次上了解了语法以及语言程序.现在,我们将要放慢速度来学习下实现更实用任务的一些细节上的技巧,例如建立内部数据结构,提取信息,生成输入对应的翻译内容等 ...
- node.js初识12
1.express框架属于后端的框架 cnpm install --save express --save的作用是将下载的保存在package.json中 你可以点击http://www.expres ...