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

使用Requests爬取Tokopedia移动端商品链接无法获取全部内容的问题求助

Requests爬取Tokopedia移动端商品链接无法获取全部内容的问题求助

嘿,这个问题我之前也碰到过!Tokopedia的移动端页面不少内容都是动态渲染的——也就是核心数据(比如价格、商品名)不是一开始就写在静态HTML里,而是页面加载后通过JavaScript异步请求加载的,这就是为啥你用简单的requests只能拿到空壳HTML,找不到目标内容的原因。咱们一步步来解决:

  • 先优化请求头,模拟真实移动端浏览器
    你当前的User-Agent太宽泛了,Tokopedia可能识别出这不是真实的移动端访问,所以没有返回完整内容。试试换成真实的移动端浏览器UA,再补充几个必要的请求头,让请求更贴近真实用户的行为:

    import requests
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.5',
        'Referer': 'https://www.tokopedia.com/'
    }
    
    resp = requests.get("https://www.tokopedia.com/now/sumo-beras-putih-kemasan-merah-5-kg", headers=headers)
    # 之后再检查resp.text里有没有价格和商品名
    
  • 尝试直接抓取商品数据的API接口
    很多电商平台会把商品详情数据通过AJAX接口返回,这种方式比爬页面更高效。你可以打开浏览器开发者工具(F12),切换到移动端模拟模式,加载目标商品页面后,在Network标签里过滤XHR/fetch请求,找包含product、detail、price这类关键词的JSON接口。找到后直接用requests请求这个API,就能拿到结构化的商品数据,不用费劲解析HTML。

  • 如果以上方法都不行,再用Selenium/Playwright模拟浏览器渲染
    如果页面完全依赖JS渲染,那requests确实拿不到动态内容,这时候就需要用能模拟真实浏览器的工具。比如用Selenium,你需要先安装Selenium和对应浏览器的驱动(比如ChromeDriver),然后写代码等待页面加载完成后提取元素:

    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浏览器(也可以去掉--headless参数看可视化过程)
    options = webdriver.ChromeOptions()
    options.add_argument('--headless=new')
    options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1')
    driver = webdriver.Chrome(options=options)
    
    try:
        driver.get("https://www.tokopedia.com/now/sumo-beras-putih-kemasan-merah-5-kg")
        # 等待价格元素加载出来,注意替换成页面实际的元素选择器
        price = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'css-1ksb19c'))
        ).text
        # 等待商品名称元素加载出来,同样替换成实际选择器
        product_name = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'css-1j7u5rr'))
        ).text
        print(f"商品名称: {product_name}")
        print(f"价格: {price}")
    finally:
        driver.quit()
    

    注意:要通过浏览器的“检查元素”功能,找到价格和商品名对应的真实标签选择器,替换代码里的示例值。

最后提醒下:别忘了遵守Tokopedia的反爬规则,不要频繁发送请求,必要的时候加个时间延迟,避免IP被封禁。

备注:内容来源于stack exchange,提问作者Hal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:58:15