Python抓取沃尔玛(Walmart)搜索结果反爬问题解决方案咨询
沃尔玛搜索页数据抓取可行实现方案
方案1:带指纹伪装的自动化工具改造
- 不要使用原生Selenium,改用
undetected-chromedriver,这个库会自动抹除浏览器的webdriver指纹、自动化标记,绕过大部分前端反爬校验 - 配置启动参数时添加:
--headless=new(新无头模式,和普通浏览器指纹一致)、--user-agent设置为真实桌面端浏览器UA,禁用--enable-automation标记 - 访问前可以先模拟跳转到沃尔玛首页,等待2-3秒再跳转搜索页,模拟真实用户访问路径,不要直接请求搜索接口
方案2:带会话上下文的Requests请求优化
- 不要直接请求搜索页,先请求沃尔玛首页拿到完整的cookie池,沃尔玛会校验请求的来源上下文和必要cookie
- 请求头必须完整配置:
User-Agent、Accept、Accept-Language、Referer设置为https://www.walmart.com/、sec-ch-ua等浏览器自带的请求头字段,和真实浏览器请求头完全一致 - 可以搭配使用
requests-html库,它内置了Chromium渲染,能处理页面动态加载的内容,同时自带会话保持功能,比原生requests更容易绕过静态反爬
方案3:动态IP代理搭配
- 以上两种方案如果还是触发拦截,需要搭配住宅代理IP使用,不要用数据中心IP,沃尔玛对数据中心IP段封禁率极高
- 每次请求切换不同的代理IP,同时控制请求频率,单IP1分钟内请求不要超过5次,避免触发频率限制
代码参考(undetected-chromedriver示例)
import undetected_chromedriver as uc from selenium.webdriver.common.by import By from time import sleep # 配置浏览器启动参数 options = uc.ChromeOptions() options.add_argument('--headless=new') options.add_argument('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') driver = uc.Chrome(options=options) try: # 先访问首页获取基础cookie driver.get('https://www.walmart.com/') sleep(2) # 跳转搜索页 driver.get('https://www.walmart.com/search/?query=coffee%20machine') sleep(3) # 提取目标元素内容 product_elements = driver.find_elements(By.CLASS_NAME, 'search-product-result') for item in product_elements: print(item.text) finally: driver.quit()
注意:如果页面是懒加载的,需要模拟滚动到页面底部,触发所有商品元素加载完成后再提取内容
内容的提问来源于stack exchange,提问作者Stephan Yazvinski
相关产品推荐
相关产品推荐

