[英]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?如何编写代码以仅显示到达和目的地国家/地区的DepartureDateTime 、 ArrivalDateTime和LocationCode ?
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.