简体   繁体   English

如何从 REST API 请求中提取 Python 中的特定数据

[英]How to extract specific data in Python from a REST API request

I'm using a REST API from RapidApi, and I succeded in printing the whole response, but I need only some specific parameters.我使用的是 RapidApi 的 REST API,我成功打印了整个响应,但我只需要一些特定参数。 Like, to print only the Deprature and Arrival times.比如,只打印出发时间和到达时间。 When using params:{} it doesn't help, because that prints every parameter with the specified argument.使用 params:{} 时它没有帮助,因为它会打印带有指定参数的每个参数。 I need the inverse, to print a specific parameter with more arguments.我需要反转,以打印更多 arguments 的特定参数。

import requests
url = "https://timetable-lookup.p.rapidapi.com/TimeTable/LHR/BCN/20221119/"

headers = {
    "X-RapidAPI-Key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "X-RapidAPI-Host": "timetable-lookup.p.rapidapi.com"
}

response = requests.request("GET",url,headers=headers, params=querystring)
print(response.text)

The API response is the following: API 响应如下:

<?xml version="1.0" encoding="UTF-8"?>
<OTA_AirDetailsRS PrimaryLangID="eng" Version="1.0" TransactionIdentifier="" FLSNote="This XML adds attributes not in the OTA XML spec.  All such attributes start with FLS" FLSDevice="ota-xml-expanded" xmlns="http://www.opentravel.org/OTA/2003/05">
  <Success/>
  <FLSResponseFields FLSOriginCode="LHR" FLSOriginName="Heathrow Airport" FLSDestinationCode="BCN" FLSDestinationName="Barcelona Airport" FLSStartDate="2022-11-19" FLSEndDate="2022-11-19" FLSResultCount="5" FLSRoutesFound="124" FLSBranchCount="1457" FLSTargetCount="1112" FLSRecordCount="785252"/>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T06:05:00" FLSDepartureTimeOffset="+0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T09:10:00" FLSArrivalTimeOffset="+0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T06:05:00" FLSDepartureTimeOffset="+0000" ArrivalDateTime="2022-11-19T09:10:00" FLSArrivalTimeOffset="+0100" FlightNumber="472" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA472">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="32N"/>
    </FlightLegDetails>
  </FlightDetails>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T07:25:00" FLSDepartureTimeOffset="+0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T10:30:00" FLSArrivalTimeOffset="+0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T07:25:00" FLSDepartureTimeOffset="+0000" ArrivalDateTime="2022-11-19T10:30:00" FLSArrivalTimeOffset="+0100" FlightNumber="478" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA478">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="320"/>
    </FlightLegDetails>
  </FlightDetails>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T10:25:00" FLSDepartureTimeOffset="+0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T13:30:00" FLSArrivalTimeOffset="+0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T10:25:00" FLSDepartureTimeOffset="+0000" ArrivalDateTime="2022-11-19T13:30:00" FLSArrivalTimeOffset="+0100" FlightNumber="474" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA474">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="32N"/>
    </FlightLegDetails>
  </FlightDetails>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T13:15:00" FLSDepartureTimeOffset="+0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T16:20:00" FLSArrivalTimeOffset="+0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T13:15:00" FLSDepartureTimeOffset="+0000" ArrivalDateTime="2022-11-19T16:20:00" FLSArrivalTimeOffset="+0100" FlightNumber="480" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA480">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="320"/>
    </FlightLegDetails>
  </FlightDetails>
  <FlightDetails TotalFlightTime="PT2H05M" TotalMiles="714" TotalTripTime="PT2H05M" FLSDepartureDateTime="2022-11-19T19:20:00" FLSDepartureTimeOffset="+0000" FLSDepartureCode="LHR" FLSDepartureName="Heathrow Airport" FLSArrivalDateTime="2022-11-19T22:25:00" FLSArrivalTimeOffset="+0100" FLSArrivalCode="BCN" FLSArrivalName="Barcelona Airport" FLSFlightType="NonStop" FLSFlightLegs="1" FLSFlightDays=".....6." FLSDayIndicator="">
    <FlightLegDetails DepartureDateTime="2022-11-19T19:20:00" FLSDepartureTimeOffset="+0000" ArrivalDateTime="2022-11-19T22:25:00" FLSArrivalTimeOffset="+0100" FlightNumber="482" JourneyDuration="PT2H05M" SequenceNumber="1" LegDistance="714" FLSMeals="G" FLSInflightServices=" " FLSUUID="LHRBCN20221119BA482">
      <DepartureAirport CodeContext="IATA" LocationCode="LHR" FLSLocationName="Heathrow Airport" Terminal="5" FLSDayIndicator=""/>
      <ArrivalAirport CodeContext="IATA" LocationCode="BCN" FLSLocationName="Barcelona Airport" Terminal="1" FLSDayIndicator=""/>
      <MarketingAirline Code="BA" CodeContext="IATA" CompanyShortName="British Airways"/>
      <Equipment AirEquipType="32N"/>
    </FlightLegDetails>
  </FlightDetails>
</OTA_AirDetailsRS>

How can I write the code to display only the DepartureDateTime , ArrivalDateTime , and LocationCode for the arrival and destination country?如何编写代码以仅显示到达和目的地国家/地区的DepartureDateTimeArrivalDateTimeLocationCode

Thank you!谢谢!

Try parsing the output using the xml.etree.ElementTree package. From there, you should be able to search through your xml tree to find the relevant data and display it however you wish.尝试使用xml.etree.ElementTree package 解析 output。从那里,您应该能够搜索 xml 树以找到相关数据并根据需要显示它。

Here's a snippet to get you started:这是一个让你开始的片段:

# create element tree object
tree = ET.parse(xmlfile)
  
# get root element
root = tree.getroot()

From there you can search from the root using a tree structure.从那里您可以使用树结构从根搜索。 The documentation is here https://docs.python.org/3/library/xml.etree.elementtree.html文档在这里https://docs.python.org/3/library/xml.etree.elementtree.html

If anyone interested, I found a solution, I used BeautifulSoup Python library to parse the contents from my XML response.如果有人感兴趣,我找到了解决方案,我使用 BeautifulSoup Python 库来解析我的 XML 响应中的内容。 Use the code below as an example:使用下面的代码作为示例:

soup = BeautifulSoup(response.content, 'html.parser')
for i in range(5):
    print ("Arrivals: ",soup.findAll("flightlegdetails")[i]["arrivaldatetime"])

I printed 5 answers from type FlightLegDetail with ArrivalDateTime foobar.我使用 ArrivalDateTime foobar 从类型 FlightLegDetail 打印了 5 个答案。 This link could give you some more information: https://www.projectpro.io/recipes/parse-xml-in-python此链接可以为您提供更多信息: https://www.projectpro.io/recipes/parse-xml-in-python

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从 Python 中的 API 请求中提取数据 - Extract data from API request in Python Python/API 请求 - 使用动态 output 从 API 请求中提取数据 - Python/API Request - Extract data from API request with dynamic output Python:从非常大的JSON请求中提取特定数据 - Python: Extract specific data from a very large JSON request 如何从 API python 中提取 JSON 数据 - How to extract JSON data from an API python 如何从 Django api rest 框架 POST 方法中提取数据 - How to extract data from Django api rest framework POST method 如何从多部分/表单数据请求中提取二进制数据? (Python)(多部分请求 base64 由 AWS API 网关编码) - How to extract binary data from multipart/form-data request? (Python) (multipart request base64 encoded by AWS API Gateway) 如何从Javascript / React发送AJAX请求并在Python REST API中接收数据 - How to send AJAX request from Javascript/React and receive data in Python REST API 如何从 python 中的 api 响应中提取特定字符串? - how to extract specific string from api response in python? 来自 REST API 的 Python 请求令牌 - Python Request Token from REST API 如何使用python从HTML页面提取特定数据? - How to extract specific data from a HTML page with python?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM