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

使用Requests登录网站后爬取数据,表格单元格仍锁定,求排查问题

网页爬取登录后仍无法获取解锁表格的问题分析

我在网页爬取前用以下代码完成登录操作:

import requests
from bs4 import BeautifulSoup

login_url = 'https://www.footballoutsiders.com/user/login'
data = {
'username': 'username',
'password': 'password'
}

with requests.Session() as s:
response = s.post(login_url , data)
print(response.text)

之后执行以下代码尝试查看目标表格,但表格单元格仍处于锁定状态:

index_page= s.get('https://www.footballoutsiders.com/stats/nfl/historical-lookup-by-week/2020/1/overall')

soup = BeautifulSoup(index_page.text, 'lxml')

table1 = soup.find('table')
table1

请问我哪里操作出错了?

可能的错误点及解决方法

  • 登录请求参数不全:很多网站登录时除了用户名和密码,还需要额外的参数,比如csrf_token(防跨站请求伪造令牌)。你得先访问登录页面,解析页面里的隐藏输入字段,把这些字段也加入到data字典中。
    示例代码:
    with requests.Session() as s:
        # 先获取登录页面,提取csrf_token
        login_page = s.get(login_url)
        soup_login = BeautifulSoup(login_page.text, 'lxml')
        csrf_token = soup_login.find('input', {'name': 'csrf_token'})['value']
        
        # 更新登录数据
        data = {
            'username': 'your_username',
            'password': 'your_password',
            'csrf_token': csrf_token
        }
        
        # 发送登录请求
        response = s.post(login_url, data=data)
    
  • 登录请求的头信息不完整:有些网站会校验请求的User-Agent,模拟浏览器的请求头能降低被拦截的概率。你可以在请求中添加headers:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
    # 发送登录请求时带上headers
    response = s.post(login_url, data=data, headers=headers)
    
  • 表格是JavaScript动态加载的:如果表格内容是通过JS动态渲染的,BeautifulSoup只能抓取静态HTML,看不到解锁后的内容。这种情况得用selenium或者playwright这类工具模拟浏览器加载页面,等JS执行完再提取表格。
    示例(用selenium):
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    
    driver = webdriver.Chrome()
    # 执行登录操作
    driver.get(login_url)
    driver.find_element(By.NAME, 'username').send_keys('your_username')
    driver.find_element(By.NAME, 'password').send_keys('your_password')
    driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
    
    # 访问目标页面并等待加载
    driver.get('https://www.footballoutsiders.com/stats/nfl/historical-lookup-by-week/2020/1/overall')
    time.sleep(2) # 可根据实际加载时间调整
    
    # 提取表格内容
    table1 = driver.find_element(By.TAG_NAME, 'table')
    print(table1.get_attribute('outerHTML'))
    
    driver.quit()
    
  • 登录请求未真正成功:先检查登录后的response状态码(正常成功是200),再看返回的内容里有没有登录成功的标识(比如显示你的用户名)。如果登录本身就失败了,后续请求自然拿不到解锁的表格。

内容的提问来源于stack exchange,提问作者Abb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:48:38