🥳加入Scrapeless 社区申请免费试用以访问我们强大的网页抓取工具包!
返回博客

如何使用Python抓取谷歌航班数据

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

27-Dec-2024

Google Flights是最流行的航班搜索引擎之一,提供实时航班价格、时刻表和航线信息。但是,如何有效地收集和分析这些数据以供自己使用呢?在本指南中,我们将向您展示如何使用Scrapeless Python库自动抓取Google Flights数据。此工具简化了流程,并确保您的抓取工作流程针对速度和可靠性进行了优化,从而轻松收集和分析Google Flights数据。

我可以抓取Google Flights的数据吗?

Google Flights上的数据被认为是公共数据,这意味着没有法律明确禁止收集此信息。但是,以合乎道德的方式抓取Google Flights数据至关重要:

  • 遵守服务条款:查看并了解Google的条款,避免违规。
  • 尊重Robots.txt:遵循此文件中提供的说明,确保您遵守网站关于自动访问的规则。

为什么抓取Google Flights数据?

你为什么要抓取Google Flights数据?我可以给你举个例子。

那就是……

Hopper是一个流行的旅游平台,专注于票价预测。它从Google Flights和其他在线旅游平台抓取航班信息,为用户提供关于未来几个月某些航班价格涨跌的建议。根据Hopper的公开数据,他们通过准确的价格预测帮助用户节省了数十亿美元,平台自身的利润也显著增加。

你可以从Google Flights中提取哪些数据?

Google Flights有很多有价值的信息。首先,将筛选器应用于您的出发地和目的地。例如,我正在寻找从纽约到波士顿的单程航班。设置筛选器后,您将看到航班选项列表。
What data can you extract from Google Flights

我们将提取几个关键细节,包括:

  • 航班名称
  • 出发时间
  • 到达时间
  • 航班时长
  • 价格
  • 经停次数
  • CO2排放量(帮助您选择更环保的出行方式)
  • CO2排放量变化。

抓取Google Flights信息时会遇到哪些障碍?

尝试抓取Google Flights时,可能会出现几个关键障碍:

**1. IP封锁:**Google采用IP封锁等反抓取措施来防止过多的自动化请求。抓取程序在几次请求后很容易被封锁。
**2. CAPTCHA挑战:**Google经常出现CAPTCHA挑战,尤其是在短时间内发出太多请求时。这使得在没有人工干预的情况下难以提取数据。
**3. 动态网站结构:**Google Flights经常更改其页面布局和HTML结构,这会导致抓取脚本中断,需要持续更新和维护。
**4. 速率限制:**Google限制您在短时间内可以发出的请求数量。这限制了您在一个会话中可以抓取的数据量。

通过了解这些挑战,使用像Scrapeless这样的高级工具,可以自动执行IP轮换,CAPTCHA求解器,以及从动态页面提取数据,您可以有效地抓取Google Flights,而不会遇到这些问题。

如何使用Python抓取Google Flights数据

使用Python抓取Google Flights数据是收集有价值的旅行信息(如航班价格、时刻表和可用性)以进行分析或比较的有效方法。在本节中,我们将引导您完成抓取Google Flights的必要步骤,从设置环境到实现抓取脚本,以便您可以自动化提取过程并收集所需的数据,同时遵守道德准则和法律约束。

首先,我们需要构建一个数据爬取环境并准备以下工具:

  1. Python:https://www.python.org/downloads/ 这是运行Python的核心软件。您可以从官方网站下载我们需要的版本,如下图所示,但建议不要下载最新版本。您可以下载最新版本之前的1-2个版本。
  2. Python IDE:任何支持Python的IDE都可以,但我们推荐PyCharm,它是一款专门为Python设计的IDE开发工具软件。对于PyCharm版本,我们推荐免费的PyCharm Community Edition

PyCharm Community Edition
3. pip:您可以使用Python包索引来使用单个命令安装运行程序所需的库。
pip

注意:如果您是Windows用户,请不要忘记在安装向导中选中“将python.exe添加到PATH”选项。这将允许Windows在终端中使用Python和命令。由于Python 3.4或更高版本默认包含它,因此您无需手动安装。

通过以上步骤,就设置好了爬取Google Flights数据的环境。接下来,您可以使用下载的PyCharm结合scraperless来爬取Google Flights数据。

**步骤1:**启动PyCharm并在菜单栏中选择文件>新建项目...。

Start PyCharm and select File

**步骤2:**然后,在弹出的窗口中,从左侧菜单中选择纯Python,然后按照如下所示设置您的项目:

注意:在下图的红色方框中,选择您在环境配置的第一步中下载的Python安装路径

select Pure Python from the left menu

**步骤3:**您可以创建一个名为python-scraper的项目,选中文件夹中的“创建main.py欢迎脚本选项”,然后单击“创建”按钮。PyCharm设置项目一段时间后,您应该看到以下内容:

check the "Create main.py welcome script option"

**步骤4:**然后,右键单击以创建一个新的Python文件。
create a new Python file

**步骤5:**要验证一切是否正常工作,请打开屏幕底部的终端选项卡并键入:python main.py。启动此命令后,您应该得到:Hi,PyCharm。

现在您可以使用scraperless将代码直接复制到PyCharm并运行它,这样我们就可以获得Google Flights的JSON格式数据。
get the JSON format data of Google Flights

以下是输出结果代码示例:

{ Copy
  "best_flights": [
    {
      "flights": [
        {
          "departure_airport": {
            "name": "Paris Orly Airport",
            "id": "ORY",
            "time": "2025-01-14 9:10"
          },
          "arrival_airport": {
            "name": "Josep Tarradellas Barcelona-El Prat Airport",
            "id": "BCN",
            "time": "2025-01-14 10:50"
          },
          "duration": 100,
          "airplane": "Airbus A321",
          "airline": "Vueling",
          "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/VY.png",
          "travel_class": "Economy",
          "flight_number": "VY 8001",
          "extensions": [
            "Below average legroom (29 in)",
            "In-seat USB outlet",
            "Emissions estimate: 93 kg CO2e"
          ],
          "ticket_also_sold_by": null,
          "legroom": "29 in",
          "overnight": false,
          "often_delayed_by_over_30_min": false
        }
      ],
      "layovers": null,
      "total_duration": 100,
      "carbon_emissions": {
        "this_flight": 93000,
        "typical_for_this_route": 86000,
        "difference_percent": 8
      },
      "price": 94,
      "type": "One-Way",
      "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/VY.png",
      "extensions": [
        "Checked baggage for a fee",
        "Fare non-refundable, taxes may be refundable",
        "Ticket changes for a fee"
      ],
      "booking_token": "WyJDalJJZHpkT1dYVXRZWE5DVTJ0QlNFSnhPVkZDUnkwdExTMHRMUzB0TFhaMGRtVXhOMEZCUVVGQlIyVkZaVEYzVG5ocVdESkJFZ1pXV1Rnd01ERWFDZ2puU0JBQ0dnTlZVMFE0SEhEblNBPT0iLFtbIk9SWSIsIjIwMjUtMDEtMTQiLCJCQ04iLG51bGwsIlZZIiwiODAwMSJdXV0="
    },
    ...
  ],
  "other_flights": [
    {
      "flights": [
        {
          "departure_airport": {
            "name": "Paris Orly Airport",
            "id": "ORY",
            "time": "2025-01-14 6:30"
          },
          "arrival_airport": {
            "name": "Josep Tarradellas Barcelona-El Prat Airport",
            "id": "BCN",
            "time": "2025-01-14 8:10"
          },
          "duration": 100,
          "airplane": "Airbus A320",
          "airline": "Vueling",
          "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/VY.png",
          "travel_class": "Economy",
          "flight_number": "VY 8005",
          "extensions": [
            "Below average legroom (29 in)",
            "In-seat USB outlet",
            "Emissions estimate: 91 kg CO2e"
          ],
          "ticket_also_sold_by": null,
          "legroom": "29 in",
          "overnight": false,
          "often_delayed_by_over_30_min": false
        }
      ],
      "layovers": null,
      "total_duration": 100,
      "carbon_emissions": {
        "this_flight": 92000,
        "typical_for_this_route": 86000,
        "difference_percent": 7
      },
      "price": 94,
      "type": "One-Way",
      "airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/VY.png",
      "extensions": [
        "Checked baggage for a fee",
        "Fare non-refundable, taxes may be refundable",
        "Ticket changes for a fee"
      ],
      "booking_token": "WyJDalJJZHpkT1dYVXRZWE5DVTJ0QlNFSnhPVkZDUnkwdExTMHRMUzB0TFhaMGRtVXhOMEZCUVVGQlIyVkZaVEYzVG5ocVdESkJFZ1pXV1Rnd01EVWFDZ2puU0JBQ0dnTlZVMFE0SEhEblNBPT0iLFtbIk9SWSIsIjIwMjUtMDEtMTQiLCJCQ04iLG51bGwsIlZZIiwiODAwNSJdXV0="
    },
    ...
  ],
  "price_insights": {
    "lowest_price": 94,
    "price_level": "high",
    "typical_price_range": [
      30,
      65
    ],
    "price_history": [
      [
        1731452400,
        40
      ],
      [
        1731538800,
        36
      ],
      ...
    ]
  },
  "airports": [
    {
      "departure": [
        {
          "airport": {
            "id": "ORY",
            "name": "Paris Orly Airport"
          },
          "city": "Paris",
          "country": "France",
          "country_ode": "FR",
          "image": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQGx8ii2KbSDdbdzfKye5oDN2bwBA6audqI7XUEf2iMRZezpn_ZbQe1ZIuvUSH-8XOMe958umDwSsAF1w",
          "thumbnail": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSyQJ-woNs0iO22mPSkmRUM5gcsTbbYeypQ6BBTeFxXr90mqTxZl57Fdq2CDuLn4w7cKZ8TT9_zZhOpF57rIpA7yWKQnqKvkKIf9Y-qJDo"
        }
      ],
      "arrival": [
        {
          "airport": {
            "id": "BCN",
            "name": "Josep Tarradellas Barcelona-El Prat Airport"
          },
          "city": "Barcelona",
          "country": "Spain",
          "country_ode": "ES",
          "image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQOk3xypjQxrqfZPlTUH5lubWcGBzOkdXv7IVkOL--w1FYohepC2Y1hN69JZMcmQsAOt2hIy7EWP0SfXA",
          "thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSm8RLrNH5mwpZ7VV_y8imJgifZndKGVUDYaU5-3_hF41Qrpet1SbU1az4wU48pwjNcbuAC9cYwCNqDCxMF1MgcMCvzO0P__9pb0Q9JBGM"
        }
      ]
    }
  ]
}

通过以上步骤,您可以抓取以下信息:

  • 抓取Google Flights公司名称:
language Copy
"name": "Paris Orly Airport",
  • 抓取Google Flights航班时间:
language Copy
"price": 94,
  • 抓取Google Flights出发和到达日期:
language Copy
  "departure_airport": {
            "name": "Paris Orly Airport",
            "id": "ORY",
            "time": "2025-01-14 9:10"
          },
          "arrival_airport": {
            "name": "Josep Tarradellas Barcelona-El Prat Airport",
            "id": "BCN",
            "time": "2025-01-14 10:50"
          },
  • 抓取Google Flights CO2排放量:
language Copy
 "carbon_emissions": {
        "this_flight": 92000,
        "typical_for_this_route": 86000,
        "difference_percent": 7
      },

使用Scrapeless抓取Google Flights

**Scrapeless**提供了一种可靠的解决方案,可以处理Google Flights上的动态内容,并确保大规模平滑地提取数据。通过利用Scrapeless的Google Flights抓取API,您可以克服Google Flights实施的IP封锁、CAPTCHA挑战和反抓取措施等挑战。

Scrapeless提供了一个Python库,可以无缝集成到您的抓取工作流程中。您可以轻松地将传统的HTTP请求替换为Scrapeless Google Flights抓取API调用以**抓取网页。**

现在就**登录Scrapeless**并开始您的免费试用!只需几个简单的步骤,您就可以轻松抓取Google Flights数据并获取实时航班信息。无需复杂的设置,快速上手

主要功能:

  1. Scrapeless Google Flights抓取API可以抓取实时航班数据,包括航班价格、出发时间、到达时间、航班状态、航空公司信息等。
  2. Scrapeless Google Flights抓取API支持各种自定义功能,用户可以根据自己的需求筛选航班数据。
  3. Scrapeless专注于提供合法合规的数据抓取服务,以确保在抓取Google Flights数据时遵守相关法律法规,避免侵犯Google的使用条款。
  4. Scrapeless API特别适用于需要高频抓取的项目,可以处理多个请求并在短时间内返回结果。适用于需要快速大规模数据抓取的业务场景。

此外,您可以浏览我们关于抓取其他Google服务(如**Google搜索结果数据、Google趋势**等)的指南。

如何将Google Flights抓取程序集成到您的系统中

您可以参考以下API示例:

  • 往返行程
language Copy
import requests
import json

url = "https://api.scrapeless.com/api/v1/scraper/request"

payload = json.dumps({
   "actor": "scraper.google.flights",
   "input": {
      "departure_id": "ORY",
      "arrival_id": "BCN",
      "data_type": 1,
      "outbound_date": "2025-01-05",
      "return_date": "2025-01-11"
   }
})
headers = {
   'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

- 单程

language Copy
import http.client
import json

conn = http.client.HTTPSConnection("api.scrapeless.com")
payload = json.dumps({
   "actor": "scraper.google.flights",
   "input": {
      "departure_id": "ORY",
      "arrival_id": "BCN",
      "data_type": 2,
      "outbound_date": "2025-01-11"
   }
})
headers = {
   'Content-Type': 'application/json'
}
conn.request("POST", "/api/v1/scraper/request", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

如果您需要更详细的信息或需要集成其他API工具,您也可以参考我们的完整文档

关于Google Flights的常见问题

1. 什么是Google Flights数据抓取?

Google Flights数据抓取是指使用网络抓取工具或API从Google Flights提取信息(如航班价格、航线、时刻表和航空公司)的过程。这些数据可用于市场分析、价格跟踪或旅游趋势预测。

2. 抓取Google Flights是否合法?

抓取公开访问的数据通常是合法的。这包括Google Flights上提供的信息,只要数据不需要授权即可访问。最高法院已明确表示,访问公开访问的信息并不违反《计算机欺诈和滥用行为法》(CFAA)。

3. 如何获得Scrapeless Google Flights的免费试用版?

您可以加入Scrapeless discord群组,加入后,会有人帮助您获得免费试用版。

结论

通过本文的介绍,您已经学习了如何使用Scrapeless来爬取Google Flights数据。Scrapeless简化了爬取过程,允许没有深入编程背景的用户轻松获取和分析Google Flights的航班信息。使用此工具,您可以有效地从Google Flights抓取航班价格、航空公司动态和市场趋势,以优化业务策略并推动增长。Scrapeless使您可以专注于数据分析,而无需担心技术细节,并帮助您轻松应对快速变化的市场需求。

在Scrapeless,我们仅访问公开数据,同时严格遵守适用的法律、法规和网站隐私政策。 本博客内容仅用于演示目的,不涉及任何非法或侵权行为。 对于使用本博客或第三方链接的信息,我们不做任何保证,也不承担任何责任。 在参与任何抓取活动之前,请咨询您的法律顾问并查看目标网站的服务条款或获取必要的权限。

最受欢迎的文章

目录