一、Cookie和Session基础知识
Cookie:客户端本地存储的键值对
Http访问是不记录状态的,所以要借助session和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)