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

如何用Beautiful Soup抓取嵌套类内容?动态网站爬取咨询

解决StubHub动态页面票价抓取问题

为什么当前代码无法获取数据

StubHub是动态渲染网站,requests.get()只能获取初始HTML骨架,页面上的票务信息(包括AdvisoryPriceDisplay__content类的内容)是通过JavaScript动态加载的,所以直接用BeautifulSoup解析初始源码找不到目标元素。

方案一:使用Selenium模拟浏览器渲染

Selenium可以模拟真实浏览器加载页面,等待JavaScript执行完毕后再获取完整DOM,之后用BeautifulSoup解析。

步骤:

  1. 安装依赖:
pip install selenium
  1. 下载对应浏览器的驱动(比如ChromeDriver,需和浏览器版本匹配)
  2. 编写代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

url = "https://www.stubhub.co.uk/nfl-london-tickets-nfl-london-london-tottenham-hotspur-stadium-9-10-2022/event/105289016/"

# 初始化Chrome浏览器驱动
driver = webdriver.Chrome()
driver.get(url)

# 等待目标元素加载完成(最多等待10秒)
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "AdvisoryPriceDisplay__content"))
    )
except:
    print("元素加载超时")
    driver.quit()
    exit()

# 获取渲染后的页面源码
page_source = driver.page_source
driver.quit()

# 用BeautifulSoup解析并提取票价
soup = BeautifulSoup(page_source, 'lxml')
price_elements = soup.find_all('div', class_='AdvisoryPriceDisplay__content')

for element in price_elements:
    print("票价:", element.get_text(strip=True))

方案二:直接调用API接口(更高效)

动态网站的票务数据通常通过AJAX请求从后端API获取,可通过浏览器开发者工具找到对应接口:

  1. 打开浏览器开发者工具(F12),切换到「网络」标签
  2. 刷新页面,筛选「XHR」类型请求,找到包含票务数据的接口(比如含ticketinventory、pricing关键词的请求)
  3. 复制接口URL,直接用requests请求并解析JSON数据

示例代码(需替换为实际找到的API接口):

import requests

api_url = "你找到的实际API接口URL"
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"
}

response = requests.get(api_url, headers=headers)
data = response.json()

# 根据API返回的JSON结构提取票价(示例结构,需实际调整)
for ticket in data.get("tickets", []):
    price = ticket.get("advisoryPrice", {}).get("amount")
    print("票价:", price)

注意:API接口可能包含签名、token等验证参数,需从页面初始源码或请求头中获取,且接口可能随时变化,需根据实际情况调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:40:35