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

如何用Python读取登录后含动态更新数值的网页HTML?

解决登录后网页HTML读取问题的可行方案

1. 携带登录会话Cookie请求

登录网站后,在浏览器F12的「应用/Application」面板里找到网站的Cookie,把这些Cookie整理成字典,用requests请求时通过cookies参数传入,就能绕过登录验证获取页面内容。

示例代码:

import requests
from bs4 import BeautifulSoup

# 从浏览器复制的Cookie,替换成实际值
session_cookies = {
    'session_id': 'xxxxxx',
    'auth_token': 'xxxxxx'
}

target_url = "登录后的目标页面URL"
resp = requests.get(target_url, cookies=session_cookies)

# 验证是否成功获取登录后页面
if "登录" not in resp.text:
    soup = BeautifulSoup(resp.text, 'html.parser')
    # 替换成目标数值对应的元素选择器
    target_num = soup.select_one(".value-element").text.strip()
    print(target_num)

注意:部分网站的Cookie会过期,要么定期重新获取,要么用requests.Session()模拟完整登录流程(需要分析登录接口的参数,比如CSRF token、用户名密码等)。

2. 用无头浏览器维持登录状态

用Selenium或Playwright这类工具模拟真实浏览器,它们会自动保存登录状态,还能处理页面的动态渲染,直接拿到最新的HTML内容。

示例(Playwright):

from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup
import time

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    
    # 先完成登录(只需执行一次)
    page.goto("网站登录页URL")
    page.fill("#username-input", "你的账号")
    page.fill("#password-input", "你的密码")
    page.click("#login-button")
    page.wait_for_url("登录后的目标页面URL")
    
    # 定期抓取数值,控制间隔避免压垮网站
    while True:
        html = page.content()
        soup = BeautifulSoup(html, 'html.parser')
        target_num = soup.select_one(".value-element").text.strip()
        print(target_num)
        # 按网站承受能力设置间隔,比如0.5秒对应2Hz,建议适当放宽
        time.sleep(0.5)
    
    browser.close()

这种方法不用手动处理Cookie,适配性强,资源占用也不算高,适合低频率的长期监控。

3. 直接调用数值更新的API接口

打开浏览器F12的「网络/Network」面板,观察数值变化时的请求,找到更新数值的API接口(一般是XHR或Fetch请求),直接调用这个接口拿数据,比抓整个HTML高效得多,也能降低网站负载。

示例代码:

import requests

# 从浏览器请求头复制必要的字段,比如认证令牌、User-Agent
headers = {
    'Authorization': 'Bearer xxxxxx',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...'
}

# 替换成实际的API地址
api_url = "https://目标网站.com/api/update-value"
resp = requests.get(api_url, headers=headers)
data = resp.json()

# 替换成数值对应的键名
target_num = data["current_value"]
print(target_num)

这是最优方案,API返回的数据量小,请求频率可控,完全不会给网站造成过大压力。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:10:53