使用Python requests爬取Investopedia交易页出现非预期输出问题
你拿到的返回内容仍是登录页面,说明登录请求未通过站点的身份校验,按以下步骤修改即可:
- 补全请求头,避免被站点反爬规则拦截
创建session后统一设置通用请求头:
session.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": "https://www.investopedia.com/" }
- 补全登录表单必填参数
你当前的payload仅传入了账号密码,遗漏了登录表单要求的login参数,站点会校验该参数是否存在,修改payload如下:
payload = { "username": "你的实际注册邮箱", "password": "你的实际登录密码", "login": "Sign In" }
- 统一域名格式
你当前代码里的URL缺少www前缀,站点的301跳转逻辑可能导致登录cookie失效,把所有涉及的URL补全www前缀即可:login_url改为https://www.investopedia.com/simulator/portfolio/trading_url改为https://www.investopedia.com/simulator/trade/tradestock.aspx
- 增加登录状态校验
登录请求发送后先确认登录结果,再访问交易页面:
# auth login_resp = session.post(post_url, data=payload, allow_redirects=True) # 可通过状态码、当前跳转后的URL判断是否登录成功 print(login_resp.status_code, login_resp.url)
内容的提问来源于stack exchange,提问作者bewop
相关产品推荐
相关产品推荐

