Requests模拟登陆与代理设置

一.登录页面信息爬取
1.cookie和session的定义
cookie是网站用来辨别用户身份,进行会话跟踪,储存在本地终端上的数据.他会在下一次请求的时候再一次携带并发送到浏览器上.
session(回话)主要用来在服务器端存储特定用户对象回话所需的信息.
2.cookie和session产生的原因
HTTP 是无状态协议,每个请求都是完全独立的,服务器无法确认当前访问者的身份,服务器和浏览器为了进行会话的跟踪,
必须主动去维护一个状态(告诉服务器前后两个请求是否来自同一个浏览器).这个状态需要通过cookie或者session来实现.
3.session的认证流程

在这里插入图片描述

4.Token(令牌):是访问接口时所需要的资源凭证.

常见的Token是由三部分组成:UID,time(时间戳),sign(签名,加密数据(HMACSHA256))

token的身份验证流程:
在这里插入图片描述

5.cookie和session的区别
session是区别于cookie的另一种记录服务器和客户端会话状态的机制,session是基于cookie实现的,并存储在服务端,session会被存储到客户端的cookie中.
**1).存储位置不同:**
cookie是存储在本地浏览器上,session存在服务器上.
**2).存储容量不同:**
每一个cookie保存的数据不超过4kb,每个站点不超过20个cookie.
**3)安全性不同:**
session更加安全
**4).服务器压力不同**
**5.禁用cookie,**一般情况下session也无法使用,特殊情况下可以使用url重写技术来使用session.url重写技术就是将session拼接到url里面.
**6).session的生命周期:**服务器创建开始,有效期结束(一般网站设定都是半小时左右)就删除.
二.代理设置
1.代理的基本原理

代理实际上是代理服务器(proxy server),它的功能是代理网络用户获取网络信息.
在这里插入图片描述

2.代理服务器分类

1)基本分类
1.HTTP代理:主要用于访问网页.
2.SSL代理:用于访问安全性较高的网站,SSL安全套接层.
3.Talent代理:主要用于远程控制.
4.POP3/SMTP代理:主要用于邮件发送.

2)根据代理的匿名程度分类
1.高度匿名代理:可以完整的将IP变成代理服务器的IP,对方追踪不到真实的IP.
2.普通匿名代理:对方可以追踪到的IP
3.透明代理:如果透明代理加密了就变成了匿名代理.

2.代理的作用

1).防止IP被封禁
2).使用好的代理服务器可以提高访问速度.
在这里插入图片描述

2.HTTP中的长连接和短连接
1).定义

长连接是在经过三次握手之后,如果在进行请求,不需要再进行三次握手.
HTTP/1.0:默认 使用短连接
HTTP/1.1:默认使用长连接 connection:keep-alive
HTTP的长连接和短连接就是TCP(传输协议)长连接和短连接

2).TCP三次握手来源(三军交战)及根本原因


TCP三次握手的根本原因:
第一次握手:
客户端发送请求连接,服务器收到了.
服务器得出结论,客户端的发送没有问题,服务器的接收也么有问题
第二次握手:
服务器发包,客户端收到了
客户端得出结论:服务器的接收和发送都没得问题,客户端的接收也没得问题.此时,服务器并不能确定客户端的接收是否正常
第三次握手:
客户端发包了,服务器收到.
服务器得出结论:客户端的接收/发送以及服务端的接收,发送都没有问题

3).HTTP/TCP的三次握手流程

在这里插入图片描述
CLOSED:关闭
LISTEN;监听
SYN_SENT:在发送连接请求后等待连接
SYN_RCVD:在发送和收到一个连接请求后等待连接确认.

seq:序列号,是一个随机值
ack:确认序号有效,只有当ACK=1的时候有效,值=seq+1
标志位:
SYN:发起一个连接,用来做同步的
ACK:确认序号有效

三.案例
1.JSON数据的转换
#coding:'utf-8'
#导入json块
import json

#1.单独的数据类型  将json类型str转化为python,json.loads()
json_data='{"name":"zhangjiayu","age":20}'
result=json.loads(json_data)
print(result)
print(type(result))
print(type(json_data))

#2.将python转化为json类型,json.dumps()
content={'name':'张三','age':23}  #jsona格式会转义
result=json.dumps(content)
print(result)
print(type(result))
print(type(content))

#3.写文件 将python转化为json类型 json.dump()
data={'name':'zan','age':23}
with open('json_test.txt','w',encoding='utf-8')as fp:
    json.dump(data,fp)

#4.文件类型 将json数据转化为python数据类型 json.load()
with open('json_test.txt','r',encoding='utf-8')as fp:
    content=json.load(fp)
print(content)
print(type(content))
2.开心网cookie登录
# 1.导入requests模块
import requests

#2.创建一个session对象
ss=requests.session()

#3.使用session对象发起请求
#确定请求的html
data={
    'loginemail':'账号',
    'password':'密码'
}

#4.请求数据
response=ss.post(url='https://security.kaixin001.com/login/login_post.php',data=data)

#5.保存数据
with open('开心网.html','w',encoding='utf-8') as fp:
    fp.write(response.text)
3.高地地图的某一个城市数据的获取
import requests,json
#请求头
headers={
    'user-agent': '#自己网页上的用户代理',
    # 'x-requested-with': 'XMLHttpRequest'
}
#请求参数
params={
    'adcode':'210200',
}

#响应
response=requests.get(url='https://ditu.amap.com/service/weather?',params=params,headers=headers)
# print(response.text)
data_dic=json.loads(response.text)['data']['data'][0]['forecast_data'][0]
# print(data_dic)

max_temp=data_dic['max_temp']

min_temp=data_dic['min_temp']

weather_name=data_dic['weather_name']

print(f"'max_temp':{max_temp},'min_temp':{min_temp},'weather_name':{weather_name}")
4.高德地图的全国城市温度,天气等数据的获取
import requests,json

#保存数据excel
from openpyxl import Workbook
#1.实例化Workbook对象
wb=Workbook()
#2.激活工作表
ws=wb.active
#3.添加表头
ws.append(['城市','天气','最低气温','最高气温'])

#请求头
headers={
    'user-agent': '#自己网页上的用户代理',
    # 'x-requested-with': 'XMLHttpRequest'
}
#请求参数
params={}

#响应
response=requests.get(url='https://ditu.amap.com/service/cityList?version=',headers=headers)

city_list=response.json()['data']['cityByLetter']
for city_ in city_list.values():
    # print(city_)
    for city in city_:
    	#定义一个列表
        lst = []
        name=city['name']
        adcode=city['adcode']
        #请求城市
        params['adcode']=adcode
        city_response=requests.get(url='https://ditu.amap.com/service/weather?',params=params,headers=headers)
		#获取每个城市的最高气温,天气情况
        data_dic = json.loads(city_response.text)['data']['data'][0]['forecast_data'][0]
        max_temp = data_dic['max_temp']

        min_temp = data_dic['min_temp']

        weather_name = data_dic['weather_name']
		#将数据放入excel中
        lst.append(name)
        lst.append(weather_name)
        lst.append(max_temp)
        lst.append(min_temp)
        ws.append(lst)
        print(name,weather_name,max_temp,min_temp)
# 保存数据
wb.save('全国今天天气.xlsx')

        # print(name,adcode)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值