首页 > 其他分享 >代理与模拟登录

代理与模拟登录

时间:2024-10-21 16:17:37浏览次数:3  
标签:登录 IP 代理 cookie requests headers1 response 模拟

01 代理

反爬:封IP

1.什么是封IP

我们用程序访问人家网站,请求次数一下很多 不像人在访问,有些网站就会封掉你的IP 封了以后,当前的IP就不能访问这个网站,爬不了这个数据

2.所有网站都会封IP吗?

不会,是否封IP是看网站的设置策略来的,他不会把这个告诉我们,也不是所有的网站会封IP,具体确定是否封IP ,需要通过爬取数据的测试才能发现

3.怎么应对封IP被封

可以通过代理IP的方式解决。代理IP让服务器以为是不同用户在请求 让我们爬虫能请求成功,因为每个不同的用户IP不一样 IP就相当于我们当前的地址,我们原来的IP地址被封了,换一个新的IP地址,新的没有被封 就可以访问

代理匿名度分类

透明代理:接访问网站  网站后台可以看到你的IP

普通匿名:代理服务器用自己的IP 代理你的IP  但是 告诉了目标服务器是代理访问

高匿名代理:隐藏代理信息 让服务器觉得是真人访问 服务器看到的是代理IP

代理IP的使用

  • 首先需要获取代理IP自己去网站上搜eg:携趣【9】【1.38】
  • import requests
    
    #  https://www.xiequ.cn/
    headers1 = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
    }
    proxies = {
        # key: 看你请求的url是啥协议 http就写http    value: http://ip:port
        'http': 'http://221.234.28.181:3828'
    }
    response = requests.get(url='http://httpbin.org/get', headers=headers1, proxies=proxies)  # 携带请求头 等号前面固定单词 等号后面 看你的变量的名字
    print(response.text)

02 模拟登录

为什么要做模拟登录

有些网站的页面需要我们登陆才能爬取 ,不登录我们爬不了这个数据

所有网站都需要做模拟登录吗?

不用,我们目标页面需要登录才能看的话 就要做模拟登录,否则就不需要,甚至有些网站没有登录的选项,去做模拟登录肯定是不合适的

模拟登录怎么做

模拟登录中,最重要的就是cookie,他可以代表我们的登录信息,所以只要获取到登录后的cookie去访问页面就行

cookie是什么

cookie可以帮我们维持登陆状态

一:cookie介绍

1:cookie是浏览器访问服务器 服务器传给浏览器的一段数据

2:浏览器需要保存这个数据

3:以后请求 浏览器需要携带这个数据

二:cookie需要了解的知识点

cookie是有时效性的 ,不同的网站时效性不一样,Cookie通过在客户端记录信息确定用户身份

我们登录了人家网站  cookie的字段就会是登录后的状态,没有登录,就是登录前的cookie,甚至有些网站没有cookie 或者不同的页面cookie的值不一样

我们不需要去纠结这个值怎么生成的 不同页面的cookie怎么不一样,爬虫只需要知道如何用这个cookie就行

模拟登录的方法

手动拿cookie登录

直接在网页手动的拿登录的cookie写在请求头

手动取cookie登录的过程

#首先登陆
# 爬虫访问核心的点 是不是就是登录状态
# 如果我们请求的时候 带上了登录后的cookie去访问  就可以成功获取需要登录才能访问的网站
import requests
headers1 = {
    # 页面目标url标头的cookie值
    'Cookie':"_4399tongji_vid=172675165087174; _4399tongji_st=1726751650; USESSIONID=78b95fb6-8088-486c-8496-b4753d7117b4; Hm_lvt_e5a07b5994f78634294b9c347a5be7d2=1726751651; HMACCOUNT=34117985325527B9; Hm_lvt_5c9e5e1fa99c3821422bf61e662d4ea5=1726751651; _4399stats_vid=17267516510209905; Puser=15348438633; ptusertype=my.4399_login; Qnick=; Pnickset=1; ol=1; _gprp_c=""; phlogact=l14633; Uauth=4399|1|2024919|my.|1726751923502|a57ec38c8f3788da3b290756bea5b46c; Pauth=3503245786|2319398724|t3ce7n2813fb79d5cc217fde0492ec8f|1726751923|10002|cdd4ed27fd244ae63c4fe926da316401|2; ck_accname=2319398724; Xauth=bd35f04eeae67404c65f7c0ca74705bc; Pnick=0; Hm_lpvt_e5a07b5994f78634294b9c347a5be7d2=1726751923; Hm_lpvt_5c9e5e1fa99c3821422bf61e662d4ea5=1726751923; Pmtime=47c0c227ef79358a7c3e%7C1726751986",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}


response = requests.get(url="https://my.4399.com/forums/index-getMtags?type=game",headers=headers1)
response.encoding="utf-8"
print(response.text)

代码登录

1:抓取登陆接口

先在登录页面打开抓包,发送错误的账号密码,点击登录 ,然后找到哪个请求是登录的请求,看看请求方法与传递的参数

2:用代码登录 发送账号密码

请求这个url,携带页面看到的参数,此时需要传递正确的账号密码,如果有加密字段或者验证码字段一般需要进行逆向

3:访问需要登录才能查看的页面 带登录后的cookie 进行请求

最后再用代码发请求,访问需要登录才能看到的数据的目标url,带上前面登录的cookie,就可以成功访问,爬取需要登录才能看到的数据了

'''
    1:抓取登陆接口
        https://ptlogin.4399.com/ptlogin/login.do?v=1 登录的url
    2:用代码登录 发送账号密码
    3:访问需要登录才能查看的页面 带登录后的cookie 进行请求


'''
import requests

headers1 = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
# 用代码登录 发送账号密码
data1 = {
    "password": 'nanfeng', # 正确的密码
    "username": "15348438633"
}
login_res = requests.post(url="https://ptlogin.4399.com/ptlogin/login.do?v=1", headers=headers1,data=data1)
print(login_res.cookies) # RequestsCookieJar对象 登录后的cookie
# 3:访问需要登录才能查看的页面 带登录后的cookie 进行请求
response = requests.get(url="https://my.4399.com/forums/index-getMtags?type=game",headers=headers1,cookies= login_res.cookies) # cookies有s 可以传字典或者CookieJar对象
response.encoding="utf-8"
print(response.text)
#!!!1 两种方法都可以处理模拟登录 用代码去做模拟登录 难度较高 推荐用cookie直接登录的写法!!!

03 会话管理

sesson对象

'''
import requests
session = requests.session() # 实例化 注意 加括号
headers1 = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
# 用代码登录 发送账号密码
data1 = {
    "password": 'nanfeng', # 正确的密码
    "username": "15348438633"
}
login_res = session.post(url="https://ptlogin.4399.com/ptlogin/login.do?v=1", headers=headers1,data=data1)
# print(login_res.cookies) # RequestsCookieJar对象 登录后的cookie
# 3:访问需要登录才能查看的页面 带登录后的cookie 进行请求
response = session.get(url="https://my.4399.com/forums/index-getMtags?type=game",headers=headers1)
response.encoding="utf-8"
print(response.text)

04 超时处理

import requests

headers1 = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
# 超过设定秒数未得到服务器响应,则触发错误
# response=requests.get('https://www.google.com/',headers=headers1,timeout = 3) # 超时时间
# 请求超过3秒 响应超过7秒就报错
response = requests.get('https://www.google.com/', headers=headers1, timeout=(3, 7))  # 超时时间

print(response.text)

代码: # cookies参数传递 使用get方法中的cookies参数进行传递 注意:参数必须为字典类型或者cookiejar对象 response = requests.get(url='登录后才能看的页面',headers=headers1,cookies= 前面模拟登录的响应对象.cookies05 异常处理

import requests

headers1 = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}

try:
    response = requests.get('https://www.google.com/', headers=headers1, timeout=(3, 7))  # 超时时间
    print(response.text)

except Exception:
    print('当前请求出错了')

标签:登录,IP,代理,cookie,requests,headers1,response,模拟
From: https://blog.csdn.net/D18346/article/details/143099789

相关文章

  • CSP 模拟 52
    B最短路先建出最短路DAG,保证最短路径唯一,所以建出来的DAG是一棵树。考虑一个点的答案可以由谁来更新,假设当前点为点\(u\),它的dfs序控制范围是\(l,r\)。首先,它可以由子树外除了父亲的节点来更新,形如ans[u]=dis[v]+w,它也可以由子树内的节点更新,路径形如1->zc->v->u,要求中......
  • 登录功能-Java实现token的生成与验证
    一、token与cookie相比较的优势1、支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的;2、无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而session需要在服务端存储,一般是通过cookie中的sessionID在服务端查找对应的session;3、无需绑定到一个特殊的身份......
  • PbootCMS登录后无法上传文件怎么办
    登录后无法上传文件问题描述:登录后无法上传文件,提示上传失败。解决方案:检查文件权限:确保上传目录(如upload/)具有可写权限(通常为755或777)。检查PHP配置:确保PHP的文件上传设置正确,特别是upload_max_filesize和post_max_size。检查防火墙和安全设置:确保服务器防火墙和安全设置......
  • PbootCMS登录页面无法正常加载,显示为空白页或错误信息怎么办
    问题描述:登录页面无法正常加载,显示为空白页或错误信息。解决方案:检查Web服务器配置:确保Web服务器(如Apache、Nginx)配置正确,特别是虚拟主机配置。检查PHP配置:确保PHP配置正确,特别是php.ini文件中的设置。检查文件权限:确保PBootCMS相关目录和文件的权限设置正确。检查PHP错误......
  • PbootCMS登录后立即被注销怎么办
    登录后立即被注销问题描述:登录后立即被注销,无法保持登录状态。解决方案:检查Cookie设置:确保浏览器的Cookie设置正确,允许PBootCMS设置Cookie。检查会话设置:确保PHP的会话设置正确,特别是session.cookie_lifetime和session.gc_maxlifetime。检查防火墙和安全设置:确保服务器防火......
  • 宝塔面板如何进行反向代理的配置
    反向代理在网络架构中充当重要角色,帮助改善网站性能、安全性并提供额外的配置选项。在宝塔面板中实施反向代理配置,涉及的步骤包括:1.安装并启动必要的软件;2.配置代理规则以指向目标服务器;3.优化性能和安全性设置;4.对配置进行测试验证。在操作中,我们将详细探讨这些步骤并提供具......
  • PbootCMS忘记登录密码怎么办?忘记了PBootCMS后台的登录密码
    问题描述:忘记了PBootCMS后台的登录密码。解决方案:通过数据库直接修改密码:登录数据库管理工具(如phpMyAdmin)。选择PBootCMS数据库。找到用户表,通常表名为pboot_admin或类似的名称。定位到你的用户记录,通常用户名为admin。修改密码字段:生成MD5哈希值:使用在线MD5生成工具......
  • Qt编写的modbus模拟器/支持网络和串口以及websocket/支持网络rtu
    一、使用说明1.1设备模拟-Com第一步,填写要模拟的设备地址,0表示自动处理,也就是收到什么地址就应答什么地址。第二步,填写对应的串口号和波特率。第三步,单击打开串口,成功后会变成关闭串口字样。单击清空数据会将左侧打印栏的信息清空。右侧一堆微调框用于模拟对应设备多个寄......
  • PbootCMS后台登录验证码不显示或者看不清楚解决办法
    1.避免使用中文路径原因:中文路径可能会导致某些文件无法正确加载,从而影响验证码的显示。解决方案:确保网站的所有文件和目录名称均为英文或数字。如果已经使用了中文路径,建议重新部署网站,使用英文或数字命名。2.切换PHP版本原因:不同版本的PHP对验证码生成的支持程度......
  • B站协议登录到实现各种功能完整代码(专栏总结)
    B站协议登录、点赞、收藏、转发实现及代码关注、动态转发实现动态抽奖实现及代码直播预约抽奖实现及代码本文为本专栏的总结文章一、扫码登录请求获取二维码包,得到二维码链接和qrcode_key参数之后,利用qrcode_key循环GET请求登录状态包即可,扫码成功时的响应中还会有一个......