Skip to content

Instantly share code, notes, and snippets.

@tudoanh
Last active September 30, 2018 07:00
Show Gist options
  • Save tudoanh/e1d6db85652a2f53c2d30ca6a9341085 to your computer and use it in GitHub Desktop.
Save tudoanh/e1d6db85652a2f53c2d30ca6a9341085 to your computer and use it in GitHub Desktop.
Get VietJet flight data from reservation code
# -*- coding: utf-8 -*-
from lxml import html
import requests
class VJCrawl():
def __init__(self):
self.s = requests.Session()
self.url = 'https://flightstatus.vietjetair.com/?lang=vi'
self.user_agent = ("Mozilla/5.0 (X11; Linux x86_64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/59.0.3071.115 Safari/537.36")
def get_tokens(self):
self.s.headers.update({'User-Agent': self.user_agent})
response = self.s.get(self.url)
tree = html.fromstring(response.content)
di = {}
di['__VIEWSTATE'] = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
di['__VIEWSTATEGENERATOR'] = tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')[0]
di['__EVENTVALIDATION'] = tree.xpath('//*[@id="__EVENTVALIDATION"]/@value')[0]
return di
def get_flight_info(self, flight_code):
token = self.get_tokens()
token['ctl00$MainContent$ScriptManager'] = 'ctl00$MainContent$ScriptManager|ctl00$MainContent$buttonSearch'
token['ctl00$ddlLanguges'] = 'vi'
token['__EVENTTARGET'] = 'ctl00$MainContent$buttonSearch'
token['__EVENTARGUMENT'] = ''
token['__ASYNCPOST'] = 'true'
token['ctl00$MainContent$txtReservationNumber'] = flight_code
r = self.s.post(self.url, data=token, params={'lang': 'vi'})
tree = html.fromstring(r.content)
result = []
for flight in tree.xpath('//*[@class="trRow"]'):
result.append(flight.xpath('./td/text()'))
return result
def get_multiple_flight_info(self, flight_code_list):
for code in flight_code_list:
yield self.get_flight_info(code)
if __name__ == '__main__':
v = VJCrawl()
print(v.get_flight_info(55767987))
for fl in v.get_multiple_flight_info(range(55767987, 55767997)):
print(fl)
@tudoanh
Copy link
Author

tudoanh commented Dec 27, 2017

Example output:

[[u'\xa0\xa0VJ156', 'Ho Chi Minh - SGN', 'Ha Noi - HAN', '22/12/2017 19:50', '22/12/2017 21:55', u'X\xc3\xa1c nh\xe1\xba\xadn'], [u'\xa0\xa0VJ9181', 'Ha Noi - HAN', 'Ho Chi Minh - SGN', '28/12/2017 01:35', '28/12/2017 03:40', u'X\xc3\xa1c nh\xe1\xba\xadn']]
[[u'\xa0\xa0VJ156', 'Ho Chi Minh - SGN', 'Ha Noi - HAN', '22/12/2017 19:50', '22/12/2017 21:55', u'X\xc3\xa1c nh\xe1\xba\xadn'], [u'\xa0\xa0VJ9181', 'Ha Noi - HAN', 'Ho Chi Minh - SGN', '28/12/2017 01:35', '28/12/2017 03:40', u'X\xc3\xa1c nh\xe1\xba\xadn']]
[[u'\xa0\xa0VJ722', 'Da Nang - DAD', 'Hai Phong - HPH', '08/12/2017 08:40', '08/12/2017 09:55', u'X\xc3\xa1c nh\xe1\xba\xadn']]
[[u'\xa0\xa0VJ310', 'Ho Chi Minh - SGN', 'Hue - HUI', '28/12/2017 17:15', '28/12/2017 18:35', u'H\xe1\xbb\xa7y'], [u'\xa0\xa0VJ301', 'Hue - HUI', 'Ho Chi Minh - SGN', '02/01/2018 08:55', '02/01/2018 10:15', u'H\xe1\xbb\xa7y']]
[[u'\xa0\xa0VJ421', 'Ha Noi - HAN', 'Pleiku - PXU', '08/12/2017 08:30', '08/12/2017 10:05', u'X\xc3\xa1c nh\xe1\xba\xadn']]
[[u'\xa0\xa0VJ242', 'Ho Chi Minh - SGN', 'Thanh Hoa - THD', '24/12/2017 07:00', '24/12/2017 08:55', u'H\xe1\xbb\xa7y']]
[[u'\xa0\xa0VJ646', 'Ho Chi Minh - SGN', 'Da Nang - DAD', '10/02/2018 21:50', '10/02/2018 23:05', u'H\xe1\xbb\xa7y'], [u'\xa0\xa0VJ641', 'Da Nang - DAD', 'Ho Chi Minh - SGN', '25/02/2018 16:35', '25/02/2018 17:50', u'H\xe1\xbb\xa7y']]
[[u'\xa0\xa0VJ242', 'Ho Chi Minh - SGN', 'Thanh Hoa - THD', '20/12/2017 08:15', '20/12/2017 10:10', u'H\xe1\xbb\xa7y'], [u'\xa0\xa0VJ241', 'Thanh Hoa - THD', 'Ho Chi Minh - SGN', '22/12/2017 10:05', '22/12/2017 12:00', u'H\xe1\xbb\xa7y']]
[[u'\xa0\xa0VJ150', 'Ho Chi Minh - SGN', 'Ha Noi - HAN', '08/12/2017 07:20', '08/12/2017 09:25', u'X\xc3\xa1c nh\xe1\xba\xadn']]
[[u'\xa0\xa0VJ424', 'Pleiku - PXU', 'Ha Noi - HAN', '22/12/2017 19:20', '22/12/2017 20:55', u'H\xe1\xbb\xa7y']]
[[u'\xa0\xa0VJ172', 'Ho Chi Minh - SGN', 'Ha Noi - HAN', '09/12/2017 23:40', '10/12/2017 01:45', u'H\xe1\xbb\xa7y']]

@nguyenhoait
Copy link

get_multiple_flight_info(range(55767987, 55767997))

cho mình hỏi flight_code này là gì nhỉ? lấy từ đâu?
Thanks bạn nhiều

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment