所以我在一个数组中创建一个离开航班列表,以便在以后的应用程序中进行迭代.
我从一个很长的HTML中获取信息.
xpathes检查,其他一切都很好.我有一个名为FlightLegs的主要包装对象.还有一个名为Flights的小内在物体.
结构很简单.每个FlightLegs都有一个DATE,航班正在离开,三个航班在单个DATE的不同时间点离开.
所以就像你有一个日期:2012年3月28日和三个航班:8:10,14:30,20:00.
很简单.
所以我有两个嵌套循环.首先,在FlightLegs上循环.设置DATE ...然后循环遍历该Leg中的Flights.并将它们添加到Flights数组中.然后将FlightLegs广告到列表中.并开始新的.
这是代码:
#Looping thourght the flight legs.
for flightLeg in flightLegs:
#. is needed in the xpath so it matches items only in this flight leg.
fleg = FlightLeg()
fleg.Date = str(flightLeg.xpath(".//input[@name='departDate1']")[0].get('value'))
innerFlights = flightLeg.xpath(".//div[@class='flights_flight']")
counter = 0
#Getting the three flights in the flight leg leaving at 8 - 14 - 20.
for flight in innerFlights:
fl = Flight()
fl.FlightPrice = str(flight.xpath(".//span[@class='flights_price']")[0].text)
fl.FlightDepartureTime = str(flight.xpath(".//span[@class='flights_departuretime']")[0].text)
fl.FlightArrivalTime = str(flight.xpath(".//span[@class='flights_arrivaltime']")[0].text)
fl.FlightNumber = str(flight.xpath(".//span[@class='flights_flightnumber']")[0].text)
fl.FlightDepAirport = str(flight.xpath(".//span[@class='flights_departureairport']")[0].text)
fleg.Flights.append(fl)
print "Lengts of inner flights: " + str(len(fleg.Flights))
counter += 1
print "Lengts of inner counter: " + str(counter)
flightList.append(fleg)
Run Code Online (Sandbox Code Playgroud)
现在问题在于内部飞行中的飞行腿阵列实际上增加了超过3.直到最后一次飞行600.似乎在循环中没有创建新物体......那么是什么原因造成的?
编辑:
FlightLeg是:
class FlightLeg:
Flight = []
Date = ""
Run Code Online (Sandbox Code Playgroud)
飞行是:
class Flight:
FlightPrice = ""
FlightDepartureTime = ""
.
.
.
Run Code Online (Sandbox Code Playgroud)
顺便说一下......我当然是Python的新手.我只是在学习.但是现在看了DSM的评论,可能是它毕竟是静态的.我认为默认情况下变量将是公共的和实例.
我如何访问它们并不重要.重要的是柜台.;-)
例如,我会通过foreach访问它们.
您需要在构造函数中初始化变量(尤其是可变变量),而不是类全局变量.(您可以在类定义中设置不可变类型,例如字符串或字符串元组,但在大多数情况下可能不应该这样做).
也就是说,而不是:
class FlightLeg:
Flight = []
Run Code Online (Sandbox Code Playgroud)
...只创建一个Flight列表,由FlightLeg... 的所有实例共享
做这个:
class FlightLeg(object):
def __init__(self):
self.flight = []
Run Code Online (Sandbox Code Playgroud)
... flight为每个FlightLeg对象创建一个新列表.
(使用大写成员名称不是错误,但在Python中恰好是单一的,与PEP-8相反).
| 归档时间: |
|
| 查看次数: |
2527 次 |
| 最近记录: |