Python3如何爬取带弹出式登录认证的网页,多种认证方式失效求方案
可行实现方案
问题排查核心点
- 你所用的目标站点弹窗认证为标准HTTP Basic Auth,并非NTLM认证,误用ntlm-auth库会导致认证无效
- 你原有代码中请求的是HTTP协议的
www2.deltron.com.pe子域名资源,而认证生效范围为HTTPS协议的全站,协议与域名不匹配会导致认证信息不被识别 - Basic Auth直接写入URL的方式在部分高版本curl/requests实现中会被默认拦截,不推荐使用
可运行代码示例
import requests as rq username = '替换为你的实际用户名' password = '替换为你的实际密码' url_prod = 'https://www2.deltron.com.pe/modulos/productos/items/producto.php?item_number=NBHP2B125LA' sess = rq.Session() # 直接传入Basic Auth元组即可,无需额外第三方库 resp = sess.get(url_prod, auth=(username, password)) print(resp.status_code) print(resp.text)
额外排查点
如果上述代码运行后仍然返回未认证页面,可按以下顺序排查:
- 确认你的账号密码在浏览器弹窗中登录可以正常访问对应资源
- 检查网络环境是否存在代理、VPN拦截认证请求头
- 在请求头中添加浏览器UA标识,避免站点拦截爬虫请求:
示例添加UA的代码:headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } resp = sess.get(url_prod, auth=(username, password), headers=headers)
内容的提问来源于stack exchange,提问作者Guillermo J. Borjas Córdova
相关产品推荐
相关产品推荐

