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

使用Selenium/BeautifulSoup爬取Latam网站产品总数失败求助

解决Latam Pass积分兑换页产品总数爬取问题

Selenium 解决方案

你的问题大概率是页面未完全加载就尝试定位元素,或者元素定位器不正确。以下是修正后的代码,通过显式等待确保元素加载完成:

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

target_url = "https://resgatepontos.latampass.latam.com/fornecedor/fastshop?modalidade=ac&produtoHome=false&relevancia=SCORE&categorias=b086c071-6d3e-485f-9a55-4f4510bec929&page=1"

driver = webdriver.Chrome()
driver.get(target_url)

try:
    # 替换为页面中显示产品总数的实际元素选择器(需自行在浏览器中检查元素获取)
    total_products_element = WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.XPATH, "//span[contains(text(), 'Total de produtos')]/following-sibling::span"))
    )
    print(f"产品总数:{total_products_element.text.strip()}")
except Exception as e:
    print(f"获取失败:{str(e)}")
finally:
    driver.quit()

注意:需要打开目标页面,右键检查元素,找到显示产品总数的标签,替换代码中的定位器(XPATH或CSS选择器)。

BeautifulSoup/API 解决方案

该页面是JS动态渲染的,直接用requests+BeautifulSoup获取静态HTML拿不到产品数据,必须抓取后端提供数据的API接口:

  1. 打开浏览器F12,切换到「Network」标签,过滤「XHR」类型请求
  2. 刷新目标页面,找到返回产品列表及总数的API请求(通常URL包含produtos或list关键字)
  3. 复制该API的URL和请求头(如User-Agent、Cookie等,避免反爬)

以下是示例代码:

import requests

# 替换为实际找到的API接口URL
api_url = "https://resgatepontos.latampass.latam.com/api/produtos/search"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    # 若需要登录权限,从浏览器请求中复制Cookie、Authorization等头信息
}

# 若接口需要参数,从浏览器请求的Query String或Body中复制
params = {
    "modalidade": "ac",
    "categorias": "b086c071-6d3e-485f-9a55-4f4510bec929",
    # 其他必要参数
}

response = requests.get(api_url, headers=headers, params=params)
if response.status_code == 200:
    data = response.json()
    # 替换为JSON中实际存储总数的字段名(如totalItems、quantidadeTotal等)
    total_products = data.get("quantidadeTotal")
    print(f"产品总数:{total_products}")
else:
    print(f"请求失败,状态码:{response.status_code}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:45:46