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

使用Python的BeautifulSoup爬取度假页面总价失败,求其他方法

可行的爬取方法推荐

你的问题核心是目标网站的总价是通过JavaScript动态渲染生成的,而BeautifulSoup只能解析静态HTML,自然无法获取动态加载的数据。以下是几种有效的解决方法:

方法1:用Selenium模拟浏览器渲染

Selenium会启动真实浏览器,等待页面JS执行完成后再抓取元素,适合处理动态渲染页面:

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

# 初始化Chrome浏览器(需提前安装对应版本的chromedriver)
driver = webdriver.Chrome()
target_url = "https://r.pl/mozaika-polnocy/zakwaterowanie-mrg?data=20230901&miastoWyjazdu=katowice&wyzywienie=2-posilki&wiek=1993-03-11&wiek=1993-03-11&liczbaPokoi=1&czyCenaZaWszystkich=0&iataWyjazdu=WAW&dlugoscPobytu=15&hotelNaPrzedluzenie=riu-tikida-palace-taghazout"

driver.get(target_url)

# 等待总价元素加载(需先在页面中定位总价对应的CSS类或XPath,示例用class假设)
try:
    total_price_elem = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "total-price"))
    )
    print("总价:", total_price_elem.text)
finally:
    driver.quit()

注意:需安装Selenium包(pip install selenium),并确保chromedriver版本与本地Chrome一致。

方法2:抓包获取后端API接口

直接抓取页面加载时调用的API接口,效率比模拟浏览器更高:

  1. 打开目标页面,按F12打开开发者工具,切换到「Network」标签,勾选「XHR」选项;
  2. 刷新页面,筛选出包含价格数据的API请求(通常命名含price、offer等关键词);
  3. 复制该请求的URL、请求头和参数,用requests直接请求:
import requests

# 复制浏览器中的请求头,确保包含User-Agent、Cookie等关键信息
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Cookie": "此处复制浏览器中的Cookie值"
}

# 替换为抓包得到的API地址
api_url = "https://example.com/api/get-price"
# 替换为API所需的参数
params = {"data": "20230901", "miastoWyjazdu": "katowice"}

response = requests.get(api_url, headers=headers, params=params)
price_data = response.json()
# 根据API返回的JSON结构提取总价
total_price = price_data["offer"]["total"]
print("总价:", total_price)

注意:部分API需要携带有效的Cookie或认证信息,需确保请求头与浏览器完全一致。

方法3:用Playwright替代Selenium

Playwright是微软推出的轻量自动化工具,API更简洁,支持多浏览器:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto(target_url)
    # 等待总价元素加载并获取文本
    total_price = page.wait_for_selector(".total-price").text_content()
    print("总价:", total_price)
    browser.close()

安装方式:先执行pip install playwright,再运行playwright install安装浏览器驱动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:40:12