You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:带密码认证的目标页面爬取问题

解决登录后维持会话爬取目标页面的问题

嘿,我来帮你搞定这个问题!你现在的核心困扰是没有保留登录后的会话状态——单独用requests.post发登录请求,只会完成这一次请求,登录生成的Cookie不会自动跟着后续的请求走,所以直接requests.get目标页面的时候,网站会认为你没登录,跳回登录页。

requests库的Session()就是专门解决这个问题的,它会自动帮你保存和携带会话Cookie,让后续请求都处于登录状态。下面是修改后的完整代码,我还帮你清理了没用的导入,调整了关键逻辑:

from bs4 import BeautifulSoup
import requests
import re

# 登录信息
username = 'myusername'
password = 'mypass'

# 关键:创建Session对象,用来维持会话
session = requests.Session()

# 1. 先发送登录请求,Session会自动保存登录Cookie
login_url = "http://fantasy.trashtalk.co/login.php"
login_data = {'email': username, 'password': password}
session.post(login_url, data=login_data)

# 2. 用同一个Session请求目标页面,此时会携带登录后的Cookie
target_url = "http://fantasy.trashtalk.co/?tpl=classement&t=1"  # 注意把&改成&,这是HTML转义字符,实际请求要用&
response = session.get(target_url)

# 现在可以正常解析目标页面的内容了
soup = BeautifulSoup(response.text, 'lxml')
# 比如提取你需要的链接(这里保留你原来的逻辑,你可以根据需求修改)
for link in soup.find_all('a', attrs={'href': re.compile("^https://")}):
    print(link.get('href'))

关键说明:

  • Session的作用:requests.Session()相当于打开一个持续的浏览器会话,所有通过这个session发的请求,都会共享Cookie、请求头等信息,完美模拟用户登录后浏览页面的行为。
  • 修正目标URL:你原来的target_url里的&是HTML中的转义字符,实际请求时要改成&,否则网站可能无法识别正确的参数。
  • 验证登录状态:如果不确定是否登录成功,可以先打印response.text,看看是不是目标页面的内容,而不是登录页的内容。如果还是登录页,可能需要检查登录表单的字段名是否正确(比如有些网站用username而不是email,可以用浏览器F12开发者工具查看登录表单的字段)。

额外小提示:

  • 可以给session添加一些请求头(比如User-Agent),模拟真实浏览器请求,避免被网站识别为爬虫。
  • 如果登录时需要验证码或者其他验证步骤,那就要额外处理,但从你的描述看,这个网站应该是简单的账号密码登录,用上面的代码就够了。

内容的提问来源于stack exchange,提问作者C.Otteaga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:17:33