使用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接口:
- 打开浏览器F12,切换到「Network」标签,过滤「XHR」类型请求
- 刷新目标页面,找到返回产品列表及总数的API请求(通常URL包含
produtos或list关键字) - 复制该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
相关产品推荐
相关产品推荐

