You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python+BS4爬取Flipkart评论:13-14页后无数据返回

解决Flipkart评论爬虫第14页报错的思路

这种情况我爬电商评论的时候也遇到过,十有八九是Flipkart的反爬机制给你拦下来了,给你几个实用的排查和解决方向:

  • 完善请求头,模拟真实浏览器
    很多电商平台会校验请求头里的User-AgentReferer字段,默认的requests请求头很容易被识别。你可以把请求头改成和浏览器一模一样的,比如:

    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',
        'Referer': 'https://www.flipkart.com/你的商品详情页URL'
    }
    

    每次发送请求时都带上这个headers,别用默认的。

  • 添加随机请求间隔,降低爬取频率
    连续快速爬取肯定会触发频率限制,前13页可能还在平台容忍的阈值内,第14页刚好触发了拦截。可以在每次请求后加个1-3秒的随机延迟:

    import time
    import random
    
    # 爬完一页后随机等待
    time.sleep(random.uniform(1, 3))
    
  • 检查分页URL的参数是否正确
    有些网站的分页不是简单的page=14,到某一页后可能会改用动态生成的cursor、sid或者lid参数。你可以打开浏览器的开发者工具,看从第13页跳转到第14页时,浏览器实际请求的URL是什么样的,确保爬虫生成的URL和这个完全一致,不要自己硬改page参数。

  • 尝试更换代理IP
    如果你的IP被平台暂时封禁了,就会出现这种前几页正常、后面突然报错的情况。可以找一些免费代理池,或者用付费代理服务,每次请求随机切换一个IP:

    proxies = {
        'http': 'http://代理IP:端口',
        'https': 'https://代理IP:端口'
    }
    response = requests.get(target_url, headers=headers, proxies=proxies)
    
  • 改用Selenium模拟浏览器渲染
    如果以上方法都不行,说明平台的反爬比较严格,用静态请求绕不过去。这时候可以试试Selenium,它能完全模拟浏览器的行为,包括加载JS、存储Cookie,绕过反爬的难度低很多:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    import random
    
    driver = webdriver.Chrome()
    driver.get("商品的评论页初始URL")
    
    # 翻到第14页
    for _ in range(13):
        next_btn = driver.find_element(By.XPATH, "//a[contains(text(), 'Next')]")
        next_btn.click()
        time.sleep(random.uniform(2, 4))
    
    # 提取评论内容
    comment_elements = driver.find_elements(By.CLASS_NAME, "_1AtVbE")
    for elem in comment_elements:
        print(elem.text)
    

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

火山引擎 最新活动