Requests模块
发起响应时观察抓包Response Headers中的Content-Type类型来决定接受的是response.text还是response.json()以及encoding编码格式
GET请求
import request
html = requests.get('url')
html_bytes = html.content
html_str = html_bytes.decode()
- requests.get(‘url’):get方式获取网页,得到response对象
- html.content:使用.content这个属性来显示bytes型网页的源代码,因为在bytes型的数据类型下,中文无法正常显示,“解码”对应的英文为“decode”
POST请求
数据提交方式
具体使用什么方式提交数据要看request
formdata提交
import requests
data = {'key1' : 'value1', 'key2' : 'value2'}
html_formdata = requests.post('url', data=data).content.decode()
JSON提交
import requests
data = {'key1' : 'value1', 'key2' : 'value2'}
html_formdata = requests.post('url', json=data).content.decode()
session会话保持
http/https协议特性:无状态
没有请求到对应页面数据的原因:发起的第二次基于个人主页页面请求的时候,服务器端并不知道该请求是基于登录状态下的请求
cookie:用来服务器端记录客户端的相关状态
cookie值来源:模拟登录发送post请求之后,用服务器创建(set-cookie)
session会话对象:
1.可以进行请求的发送
2.如果请求过程中产生cookie,则该cookie会被自动储存/携带在该session对象中
保持cookie方法:
- 手动处理:通过抓包工具获取cookie值,将该值封装到headers中(不建议使用)
2. 自动处理(session):
01- 创建session对象:session = requests.Session()
02- 使用session对象发起post请求:response = session.post(url, headers=headers, data=data)
03- 使用session对象发起get请求:response1 = session.get(url1, headers=headers)
```python01.创建session对象
session = requests.Session()
02.使用session对象发起post请求
response = session.post(url, headers=headers, data=data)
03.使用session对象发起get请求
response1 = session.get(url1, headers=headers)
<a name="E5gdS"></a>
### proxy代理
> 反爬机制:封IP
> 反反爬:代理IP池
> `{'协议类型': '地址:端口'}`
```python
proxies = {'https': '222.110.147.50:3128'}
response = requests.get(url, headers=headers, proxies=proxies)
# 或者直接写一起
response = requests.get(url, headers=headers, proxies={'https': '222.110.147.50:3128'})