爬虫实训03

一、cookie和session

1、什么是cookie和session?
	cookie是网站用来辨别用户身份,进行会话跟踪,存储在本地终端上的数据。
	session(会话)起来本含义是指有始有终的一系列动作和消息。在web中,session主要用来在服务器端存储特定用户对象会话所需要的信息。
2、cookie和session产生的原因:
	http协议是一个无状态协议,在特定操作的时候,需要保存信息,进而产生了cookie和session。
3、cookie原理:
	由服务器来产生,浏览器第一次请求,服务器发送给客户端进而保存。
	浏览器继续访问时,就会在请求头的cookie字段上附带cookie信息,这样服务器就可以识别是谁在访问了。
	
	但是cookie存在缺陷:
		1、不安全--本地保存,容易被篡改。
		2、大小受限,本身最大4kb。
		
	cookie虽然在一定程度上解决了‘保持状态’的需求,但是我们希望有一种新的技术可以克服cookie缺陷,这种技术就是session。
4、session原理:
	session在服务器保存。----解决安全问题。
	问题来了:服务器上的session,但是客户端请求发送过来,服务器如何知道session_a,session_b,到底和那个请求对应。
	所以为了解决这个问题:cookie就作为这个桥梁。在cookie有一个sessionid字段,可以用来表示这个请求对应服务器中的哪一个session。
	禁用cookie,一般情况下,session也无法使用。特殊情况下可以使用url重写技术来使用session。
		url重写技术:将sessionid拼接到url里面。
		
	session的生命周期:服务器创建开始,有效期结束(一般网站设定都是大约30分钟左右),就删除。
5、常见误区:打开浏览器中的一个网页,浏览器关闭,这个网页的session会不会失效?
	不会,服务器到底删除不删除session,由session的生命周期。有效期结束,就会被删除。
6、cookie的字段
	(1)Name : 该的名称。一旦创建, 该名称便不可更改。
	(2)value : 该cookie 的值。如果值为Unicode 字符, 需要为字符编码。如果值为二进制数据, 则需要使用BASE64 编码。
	(3)Domain : 可以访问该cookle 的域名。例如, 如果设置为.zhihu.com , 则所有以zhihu.com 结尾的域名都可以访问该cookie。
	(4)MaxAge : 该cookie 失效的时间, 单位为秒, 也常和Expires一起使用, 通过它可以计算出其有效时间。Max Age 如果为正数, 则该cookie 在Max Age 秒之后失效。如果为负数, 则关闭浏览器时cookie 即失效, 也不会以任何形式保存该cookie 。
	(5)Path : 该cookie 的使用路径。如果设置为/path/ , 则只有路径为/ path / 的页面可以访问该cookie 。如果设置为/ , 则本域名下的所有页面都可以访问该cookieo
	(6)Size 字段: 此Cookie 的大小。
	(8)HTTP 字段: cookie 的httponly 属性。若此属性为true , 则只有在HTTP 头中会带有此Cookie 的信息, 而不能通过document.cookie 来访问此Cookie。
	(9)Secure : 该cookie 是否仅被使用安全协议传输。安全协议有H TTP s 和SSL 等, 在网络上传输数据之前先将数据加密。默认为false。

7、会话cookie和持久cookie
会话cookie:Max Age 为负数,则关闭浏览器时cookie 即失效,保存在内存中的cookie。
持久cookie:Max Age 如果为正数, 则该cookie 在Max Age 秒之后失效。保存在硬盘上的cookie

持久化:将内存中数据持久化到硬盘上。其实就是数据保存到文件或者数据库中。
内存主要的作用就是由于速度快速度快,启动应用软件或者程序的时候,就会分配一定内存空间作为该程序运行内存。
内存一旦断点,就会被清空。

序列化:将对象持久化到硬盘中。
8、用requests登录页面。
(1)将登录后的cookie封装到请求头字典中,这样就可以了。
		案例:人人网登录

二、代理

1、代理作用
		192.168.0.101
	(1)突破自身IP 访问限制, 访问一些平时不能访问的站点。
	(2)访问一些单位或团体内部资源: 比如使用教育网内地址段免费代理服务器, 就可以用于对教育网开放的各类FTP 下载上传, 以及各类资料查询共享等服务。
	(3)提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区, 当有外界的信息通过时, 同时也将其保存到缓冲区中, 当其他用户再访问相同的信息时, 则直接由缓冲区中取屮信息传给用户, 以提高访问速度。
	(4)隐藏真实IP : 上网者也可以通过这种方法隐藏自己的IP , 免受攻击。对于爬虫来说, 我们用代理就是为了隐藏自身IP , 防止自身的被封锁。

2、代理的分类
	(1)根据协议区分
	根据代理的协议, 代理可以分为如下类别。
	FTP 代理服务器:主要用于访问FTP 服务器, 一般有上传、下载以及缓存功能, 端口一般为21 、2121 等。
	HTTP 代理服务器:主要用于访问网页, 一般有内容过滤和缓存功能, 端口一般为80 、8080 、3128 等。
	SSL/TLS 代理:主要用于访问加密网站, 一般有SSL 或TLS加密功能( 最高支持128 位加密强度) , 端口一般为443 。
	RTSP 代理:主要用于访问Real 流媒体服务器, 一般有缓存功能, 端口一般为554 。
	Telnet 代理:主要用于telnet 远程控制( 黑客人侵计算机时常用于隐藏身份),端口一般为23 。
	POP3/SMTP 代理:主要用于POP3/SMTP 方式收发邮件, 一般有缓存功能, 端口一般为110 / 25 。
	SOCKS 代理:只是单纯传递数据包, 不关心具体协议和用法, 所以速度快很多, 一般有缓存功能, 端口一般为1080 。SOCKS 代理协议又分为SOCKS4 和SOCKS5 , 前者只支持TCP ,而后者支持TCP 和UDP , 还支持各种身份验证机制、服务器端域名解析等。简单来说,SOCKS4 能做到的SOCKS5 都可以做到, 但SOCKS5 能做到的SOCKS4 不一定能做到。
	(2)根据匿名程度区分
	根据代理的匿名程度, 代理可以分为如下类别。
	高度匿名代理: 会将数据包原封不动地转发, 在服务端看来就好像真的是一个普通客户端在访问, 而记录的IP 是代理服务器的IPO
	普通匿名代理: 会在数据包上做一些改动, 服务端上有可能发现这是个代理服务器, 也有一定几率追查到客户端的真实伊代理服务器通常会加人的HITP 头有HTTP_VIA 和HTTP_X_FORWARDED FOR 。
	透明代理:不但改动了数据包, 还会告诉服务器客户端的真实IPO 这种代理除了能用缓存技术提高浏览速度, 能用内容过滤提高安全性之外, 并无其他显著作用, 最常见的例子是内网中的硬件防火墙。
	间谍代理:指组织或个人创建的用于记录用户传输的数据, 然后进行研究、监控等目的的代理服务器。
	
3、代理的设置
	proxies = {
		'http':'http://114.99.11.179:9999',#http和https都可以用http作为key
	}
	response = requests.get/post(proxies = proxies)

三、正则表达式

(一)元字符
	1、匹配边界
		^ ---行首
		$---行尾
	2、表示重复次数
		? ---0或者1
		* ---->=0
		+ --- >=1
		{n,}--->=n
		{n,m}---》n,《m
		{n}---n次
	3、匹配文字
		[]----表示匹配单字符
			[abc]--匹配a或者b或者c中的其中一个
			[a-zA-Z0-9]---匹配所有小写,大写和数字中的一个
		\b---单词的边界
		\d---表示数字
		\w--数字、字母、下划线
		\s---空白字符(空格,换行,制表)
		.---除换行以外的任意字符
(二)re模块
	1、re模块使用步骤
		#(1)导包
		import re
		#(2)将正则表达式编译成一个pattern对象
		pattern = re.compile(
				r'正则表达式',
				'匹配模式',#可以不指定,默认就按正则表达式本来的含义进行匹配。
			)
		正则匹配模式:
			re.S----.可以匹配换行符
			re.I---忽略大小写
		#(3)pattern对象的方法(match,search、findall)匹配字符串。
		match对象的属性:
			match.group()等价于match.group(0)----返回匹配结果内容
			match.span()--匹配范围
			match.start()
			match.end()
			
	2、pattern对象的方法
		(1)match方法:默认从头开始匹配,只匹配一次,返回一个match对象
			Match对象 = pattern.match(
				string,#要匹配的目标字符串
				start,#要匹配目标字符串的起始位置(可选)
				end#结束位置(可选)
			)
		(2)search 方法:全文匹配,只匹配一次,返回一个match对象
			Match = pattern.search(
				string,#要匹配的目标字符串
				start,#要匹配目标字符串的起始位置(可选)
				end#结束位置(可选)
			)
		(3)findall方法:全文匹配,匹配多次,返回一个list	
			list= pattern.findall(
				string,#要匹配的目标字符串
				start,#要匹配目标字符串的起始位置(可选)
				end#结束位置(可选)
			)
		(4)finditer方法:全文匹配,匹配多次,返回一个迭代器,迭代器里面存储的是match对象
			迭代器= pattern.findall(
				string,#要匹配的目标字符串
				start,#要匹配目标字符串的起始位置(可选)
				end#结束位置(可选)
			)
			什么是迭代器?
				当有一种数据或者内容比较多的时候,可以将其分装迭代器。---通过for循环来使用这个迭代器就可以获取其中的每一个数据。
				有__next__和__iter__。
			可迭代对象?有__iter__方法对象。
				str
				bytes
				list
				dict
				tuple
				文件流
					需求:打印输入文件内容,同时输出行号。
		(5)split:安正则方法表示内容进行分割字符串,返回分割后子串list
				Pattern.split(
						String,
						Maxsplit#指定最大分隔次数,默认全部分隔,可选
					)
					http://www.baidu.com:8080/index.html
												
		(6)sub:按照正则表示的内容替换字符串(重要的)
			Pattern.sub(
					repl, #替换成什么
					String,#替换什么
					Count#替换次数,可选,默认全部替换
				)--->替换后的字符串
				
			(1)repl字符串
				import re
				p = re.compile(r'(\w+) (\w+)')
				s = 'hello 123,hello 456'
				#提前用p去匹配目标串,找到能匹配出来的内容,就是替换找出来的这个内容的。
				print(p.sub(r'hello world',s))#使用‘hello world'替换'hello 123'和'hello 456'
				print(p.sub(r'\2 \1',s))#引用分组
			(2)当repl是一个函数的时候,这个函数是有要求的:
				a、必须带一个参数,这个参数其实就是提前用p去匹配目标串,得到match对象。
				b、这个函数必须有返回值,返回值是一个字符串,这个字符串将来就作为替换的内容。
	3、分组
		分组在正则表达式中就是用()来表示的。一个括号就是一个分组。分组的作用主要有以下两个:
			(1)筛选特定内容
			(2)引用分组
	4、贪婪非贪婪模式
		(1)贪婪是用*来控制,python默认是贪婪模式,所以默认所有的数量控制符都是取所能匹配的最大值。
		(2)非贪婪是用?来控制的,?放在数量控制符后面,表示数量控制符匹配最小的次数。
	5、.*?大法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值