一周目,爬虫,四日

爬虫模拟登录

1  cookie与session

使用领域:随着时代的发展,越来越多的网址需要保存用户的状态,列如保存会员与非会员用户的状态,因此专门用于解决http协议无状态的特点

1.1  cookie

  保存在游览器上的键值对数据

  优点  游览器自动保存数据,不需要反复获取密码,会自动携带

  缺点  cookie的信息是可以被直观看见的

1.2  session

  保存在服务器上的相关用户数据

  优点  用户登录后会返回一个或几个随机字符给客户端,客户端保存后可以携带访问,安全性高

  缺点  字符串类似于令牌,其他计算机携带也可以登录该用户

2  python模拟cookie登录操作

import requests


res = requests.post('http://www.aa7a.cn/user.php',
                    data={
                        "username": "616564099@qq.com",
                        "password": "lqz123",
                        "captcha": "kuyb",
                        "remember": 1,
                        "ref": "http://www.aa7a.cn/user.php?act=logout",
                        "act": "act_login"
                    }  # data参数携带请求体数据
                    )
# 获取cookie数据
# print(res.cookies.get_dict())
user_cookie = res.cookies.get_dict()
"""
用户名或密码错误的情况下返回的cookie数据
    {'ECS[visit_times]': '1', 'ECS_ID': '69763617dc5ff442c6ab713eb37a470886669dc2'}
用户名和密码都正确的情况下返回的cookie数据
    {
    'ECS[password]': '4a5e6ce9d1aba9de9b31abdf303bbdc2', 
    'ECS[user_id]': '61399', 
    'ECS[username]': '616564099%40qq.com', 
    'ECS[visit_times]': '1', 
    'ECS_ID': 'e18e2394d710197019304ce69b184d8969be0fbd'
    }
"""

# 使用cookie访问网站
res1 = requests.get('http://www.aa7a.cn/',
                    cookies=user_cookie
                    )
if '616564099@qq.com' in res1.text:
    print('登录身份访问')
else:
    print('cookie存在错误')
View Code

 3  获取大数据

stream参数:逐条获取数据写入文件,防止全部存放内存,导致溢出重启等情况

方法  

import requests
response=requests.get('https://www.shiping.com/xxx.mp4',
                      stream=True)
with open('b.mp4','wb') as f:
    for line in response.iter_content():  # 一行一行读取内容
        f.write(line)

4  jason格式

jason格式特征引号为双引号,前后端的数据交互一般用的也是双引号

import requests
res = requests.get('https://api.bilibili.com/x/player/pagelist?bvid=BV1QE41147hU&jsonp=jsonp')
print(res.json()) 
 # 可以直接将json格式字符串转换成python对应的数据类型

5  ip代持池

有很多网站针对客户端的IP地址也存在防爬措施
eg:比如一分钟之内同一个IP地址访问该网站的次数不能超过30次超过了就封禁该IP地址
IP代理池里面有很多IP地址每次访问从中随机挑选一个

import requests
proxies={
    'http':'114.99.223.131:8888',
    'http':'119.7.145.201:8080',
    'http':'175.155.142.28:8080',
}
respone=requests.get('https://www.12306.cn',
                     proxies=proxies)

6  cookie代理池

有很多网站针对客户端的cookie也存在防爬措施
eg:比如一分钟之内同一个cookie访问该网站的次数不能超过30次超过了就封禁该cookie
cookie代理池里面有很多cookie每次访问从中随机挑选一个

respone=requests.get('https://www.12306.cn',
                     cookies={})

 

posted @ 2021-09-16 21:58  aa_wang  阅读(43)  评论(0)    收藏  举报