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

为何爬取MakeMyTrip与Tanishq网站时频繁出现访问拒绝或超时?

无法爬取MakeMyTrip与Tanishq网站的原因及解决思路

用户问题

无法爬取以下两个网站:Make My Trip、Tanishq。以下是我的代码:

import requests
from bs4 import BeautifulSoup

request_headers = {
            "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
            'X-Crawlera-Profile': 'pass',
            'X-Crawlera-Cookies': 'disable',
            "Upgrade-Insecure-Requests": "1",
            'sec-fetch-site': 'none',
            'sec-fetch-mode': 'navigate',
            'sec-fetch-user': '?1',
            'sec-ch-ua-mobile':'?0',
            'sec-fetch-dest': 'document',
            "Dnt": "1",
            'cache-control': 'no-cache',
            "Accept-Encoding": "gzip, deflate,br",
            'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8',
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
            }
try:

    response = requests.get('https://makemytrip.com/',headers=request_headers,timeout=20,stream=True)
    soup = BeautifulSoup(response.text, 'html.parser')
    print(str(soup))
except requests.exceptions.Timeout as t:
    print(str(t))
    print ("Timeout occurred")
except Exception as e:
    print(str(e))

我也尝试过使用Selenium,但依旧无法爬取这些网站。请问可能是什么问题?


核心原因分析

1. 严格的反爬机制

这类旅游、电商网站普遍配备多层反爬策略:

  • 指纹识别:requests的请求头虽模拟了浏览器,但缺少完整的动态特征(如sec-ch-ua的完整标识);Selenium默认会暴露window.navigator.webdriver属性,被网站直接判定为自动化工具。
  • IP封禁:频繁请求会触发IP黑名单,单一IP的规律性请求极易被识别为爬虫。
  • CDN防护:多数网站采用Cloudflare、Akamai等CDN,会拦截异常请求并要求人机验证,普通爬取工具无法直接绕过。

2. 代码配置不合理

你的requests代码中包含X-Crawlera-Profile和X-Crawlera-Cookies两个Crawlera专属请求头——如果未配置Crawlera代理服务,这些头会被网站识别为异常请求,直接拒绝或返回无效内容。

3. 动态内容与会话依赖

  • 网站大量内容通过AJAX动态加载,requests直接GET只能拿到空的静态骨架;Selenium若未设置足够的等待时间,也会在内容加载完成前抓取到空数据。
  • 部分页面需要会话Cookie验证,代码禁用了Crawlera的Cookie处理,但未手动维护会话,导致请求被判定为未授权。

可行解决方向

1. 修复请求头配置

移除无用的X-Crawlera-*头,补充完整的浏览器特征:

request_headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
    "sec-ch-ua": '"Not_A Brand";v="99", "Google Chrome";v="108", "Chromium";v="108"',
    "sec-ch-ua-platform": '"Windows"',
    "Referer": "https://www.google.com/",  # 模拟从搜索引擎跳转
    # 保留其他必要头,删除X-Crawlera相关项
}

2. 优化Selenium反检测

改用undetected-chromedriver替代普通Selenium,自动修改浏览器指纹避免被识别:

from undetected_chromedriver import Chrome, ChromeOptions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

options = ChromeOptions()
options.add_argument("--headless=new")  # 可选无头模式
driver = Chrome(options=options)
driver.get("https://www.makemytrip.com/")
# 显式等待确保页面加载完成
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CLASS_NAME, "header-container")))
print(driver.page_source)
driver.quit()

3. 代理与请求频率控制

  • 使用高匿代理池,每次请求轮换IP,避免单一IP被封禁。
  • 添加随机延迟(如time.sleep(random.uniform(1, 3))),模拟人类浏览节奏,降低反爬触发概率。

4. 处理CDN与动态内容

  • 针对Cloudflare防护,可尝试使用cfscrape库配合requests绕过基础验证。
  • Selenium中优先使用显式等待(WebDriverWait)而非固定延迟,确保目标元素加载完成后再抓取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:16:14