使用Python+BS4爬取Flipkart评论:13-14页后无数据返回
解决Flipkart评论爬虫第14页报错的思路
这种情况我爬电商评论的时候也遇到过,十有八九是Flipkart的反爬机制给你拦下来了,给你几个实用的排查和解决方向:
完善请求头,模拟真实浏览器
很多电商平台会校验请求头里的User-Agent、Referer字段,默认的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




