
本教程旨在解决使用python `requests`库对需要登录的网站进行数据抓取时,遇到`406 not acceptable`或请求被拒绝的问题。核心在于通过模拟浏览器行为,在`post`请求中添加必要的http请求头(如`user-agent`、`accept`等),从而成功绕过网站的反爬机制,实现数据的有效获取。
在使用Python的requests库进行网络爬虫时,尤其是针对需要登录的平台进行数据抓取时,可能会遇到请求返回406 Not Acceptable状态码并显示“Rejected”的情况。这通常意味着服务器拒绝了你的请求,因为它认为你的请求不符合其接受的标准。
默认情况下,requests库发送的请求头信息非常简洁,这与主流浏览器发送的请求头有显著差异。许多网站,特别是那些有反爬机制或对安全性要求较高的平台,会检查这些请求头,以判断请求是否来自合法的浏览器用户。如果请求头信息缺失或不符合预期,服务器就可能拒绝该请求。
以下是一个典型的初始尝试代码示例,它可能导致406错误:
import requests
from pprint import pprint
# 假设 username 和 password 从 Config 文件中导入
# from Config import username, password
def main():
    # 目标URL,可能包含登录参数或其他会话信息
    url = 'https://app.plus500.com/trade?innerTags=_cc_&webvisitid=d9cf772d-6ad5-492c-b782-e3fbeaf87654&page=login' \
          '&_ga=2.35401569.1585895796.1661533386-1432537898.1661336007 '
    with requests.session() as session:
        # 尝试使用用户名和密码进行POST请求
        # 注意:这里的auth参数通常用于HTTP基本认证,对于表单登录可能需要POST表单数据
        # 但在某些API接口中,auth也可能被特殊处理。此处我们先沿用原始问题中的用法。
        response = session.post(url, auth=('your_username', 'your_password'))
        pprint(response.text)
if __name__ == '__main__':
    main()运行上述代码,可能会得到类似以下的“Rejected”响应:
立即学习“Python免费学习笔记(深入)”;
('{\n'
 '  "status": "Rejected",\n'
 '  "statusCode": "406",\n'
 '  "supportID": "...",\n'
 '  "ipAddress": "my IP",\n'
 '  "timeStamp": "2022-08-27 12:30:47"\n'
 '}')这明确指出请求因406状态码被拒绝。
解决406状态码问题的关键在于,让你的Python程序发送的HTTP请求更像一个真实的浏览器请求。这通常通过在请求中添加或修改HTTP请求头来实现。User-Agent是其中最重要的一项,它告诉服务器客户端的类型和版本。此外,Accept、Accept-Encoding、Accept-Language和Connection等头信息也常被用于识别合法请求。
以下是修复此问题的具体步骤和代码示例:
首先,创建一个字典来存储模拟浏览器的HTTP请求头。这些头信息可以从你常用的浏览器(如Chrome、Firefox)的开发者工具中获取。
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
    "Accept-Encoding": "gzip, deflate, br", # 现代浏览器通常也支持brotli (br)
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7", # 可以根据需要调整语言偏好
    "Connection": "keep-alive",
    # 更多可能需要的头信息,如Referer, Cookie等,根据实际情况添加
    # "Referer": "https://app.plus500.com/trade?page=login", # 模拟来源页面
    # "Content-Type": "application/x-www-form-urlencoded" # 如果是表单提交,可能需要
}各项请求头解释:
将上述定义的headers字典作为参数传递给session.post()方法。
import requests
from pprint import pprint
# from Config import username, password # 假设已定义
def main():
    url = 'https://app.plus500.com/trade?innerTags=_cc_&webvisitid=d9cf772d-6ad5-492c-b782-e3fbeaf87654&page=login' \
          '&_ga=2.35401569.1585895796.1661533386-1432537898.1661336007 '
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
        "Connection": "keep-alive"
    }
    with requests.session() as session:
        # 将 headers 参数添加到 POST 请求中
        response = session.post(url, auth=('your_username', 'your_password'), headers=headers)
        pprint(response.text)
if __name__ == '__main__':
    main()通过添加这些模拟浏览器的请求头,服务器更有可能将你的请求视为合法请求,从而返回预期的响应内容,而不是406 Rejected。
login_data = {'username': 'your_username', 'password': 'your_password'}
headers_with_content_type = {**headers, "Content-Type": "application/x-www-form-urlencoded"}
response = session.post(login_url, data=login_data, headers=headers_with_content_type)当使用Python requests库进行网络爬虫并遇到406 Not Acceptable或请求被拒绝的情况时,通常是由于HTTP请求头信息不完整或不符合服务器预期所致。通过在POST请求中添加模拟浏览器行为的User-Agent、Accept等关键请求头,可以有效地解决这类问题。同时,理解HTTP请求的底层机制以及网站可能采取的反爬策略,是构建健壮且高效爬虫的关键。在实践中,务必结合目标网站的具体情况,灵活调整请求参数,并始终遵循网络爬虫的道德和法律规范。
以上就是Python requests库处理登录网站爬取数据时406状态码的解决方案的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                
                                
                                
                                
                                
                                
                                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号