一、requests模块(重点)

(一)requests模块简介

**Urllib和requests模块是发起http请求最常见的模块**。
安装:pip install reqeusts

(二)requests模块的get方法

1、response = requests.get(
					url=请求url地址,
					headers = 请求头字典,
					params=请求参数字典,
				)
		2、get请求一般带参数,带参数就将参数封装到params字典中就可以了。
		案例:搜狗新闻

python 爬虫 embed python 爬虫模块_python

3、response对象

(1)响应正文:
					a、字符串格式的响应正文:response.text
					b、字节类型(bytes)的响应正文:response.content
			(2)响应正文的乱码问题解决:
					a、encode和decode就是二进制和字符串之间转换方法。
			  		 正常的计算机数据本质都是二进制--bytes。
			 		str.encode('编码')--->bytes
			 		bytes.decode('编码')---->str
			**乱码:编码不一致造成的**。
					response.content.decode('页面的正确编码')---得到页面正确的字符串内容
				b、response.text之所以可以获取字符串格式,其实在requests模块的底层用
					response.encoding这个属性所对应的编码,来将二进制内容变成字符串。其实就是response.encoding所对应的编码错了。只需要指定正确的即可。
					response.encoding这个属性值是requests模块自动识别的。
					response.encoding='页面正确编码'
					response.text--------->正确的页面内容
			如果response.text乱码了,可以先给response.encoding设置正确编码,再通过response.text就可以获取正确的页面内容。
		(3)状态码:response.status_code
		(4)响应头:response.headers

4、分页如何实现?

分页请求的每一页url基本上都是通过get请求的一个请求参数决定的,所以只需要通过get请求的params字典中的分页字段找到规律,就可以了。

(三)requests post请求

response = requests.post(
			url = 请求url地址,
			headers = 请求头字典,
			data=请求数据字典,
			)---response对象。

三、数据的分类

1、分类
	(1)结构化数据:能用关系型数据库描述的数据。
			特点:数据以行为单位,一行数据表示一个实体的信息,每一行的数据的属性是相同的。
			举例:关系数据库中存储的表
			处理方法:sql---结构化查询语言---语言---可以在关系型数据库中对数据的操作。
	(2)半结构化数据:拥有自描述结构数据
			特点:包含相关标记,用来分隔语义元素以及对记录和字段进行分层----也被称为自描述结构
			举例:html,xml,json。
			处理方法:正则,xpath(xml,html)
	(3)非结构化数据:
			特点:没有固定结构的数据。
			举例:文档,图片,视频,音频等等,都是通过整体存储二进制格式来保存的。
			如果下载视频,音频。
				处理:
					response = requests.get(url='视频的地址')
					保存response.content即可,文件名称后要注意。
	2、json(json(JavaScript Object Notation,JS对象标记))数据
			json是一种数据【交换】的格式。
			json是如何来进行交换的。
	**json其实是在js语言中,用'字符串'的形式来表示js中的对象和数组的一种技术所以json本质上是字符串**。
			js中的对象:var obj = {name:'zhangsan',age:'10'}----在python中这个可以当成:dict
			js中的数组:var arr = ['a','b','c','d']----在python中这个可以当成:list。
	3、json数据的处理(重点)
			(1)使用json模块处理。
				json_str:json数据
				json.loads(json_str)--->python的list或者dict
				json.dumps(python的list或者字典)--->json_str
			(2)在requests模块中,response对象有个json方法,可以直接得到相应json字符串解析后的内容
					response.json()--->python的list或者dict

四、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 : 该cookie的名称。一旦创建, 便不可更改。
		(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

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