Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding: cp1251
- # Скрипт для получения списка кодов IATA
- import requests
- from lxml import html
- import threading
- import Queue
- def request_for_iata_codes(url, mutex): # Запрос на получение ряда трехбуквенных кодов IATA
- global result
- while not url.empty():
- respond = requests.get(url.get())
- parsed = html.fromstring(respond.text)
- codes = parsed.xpath("//*[@id='block-system-main']/div/div/table/tbody/tr/td/div/span/a/text()")
- mutex.acquire()
- result += codes
- mutex.release()
- def threads_starting(data, target, lock): # Запусков нескольких потоков и ожидание обработки
- threads = []
- for x in xrange(12):
- thread = threading.Thread(target=target, args=(data, lock))
- thread.start()
- threads.append(thread)
- for thread in threads:
- thread.join()
- def library_writing(url, mutex): # Запросы по каждому коду IATA для сбора информации об аэропортах
- global libdoc, i
- while not url.empty():
- respond = requests.get(url.get())
- parsed = html.fromstring(respond.text)
- root = parsed.xpath(".//*[@id='block-system-main']/div/div[1]/div")
- rescity = root[0].xpath("./div[4]/div/p/text()")[0][2:].encode(coding) # Город аэропорта
- resname = root[0].xpath("./div[5]/div/p/text()")[0][2:].encode(coding) # Название аэропорта
- rescode = root[0].xpath("./div[6]/span/p/text()")[0][2:] # Код IATA
- result_string = '%-3s\t%-50s\t%-25s\t%-s\t\n' % (rescode, rescountry,
- rescity, resname) # Формирование строки для библиотеки
- mutex.acquire()
- libdoc.write(result_string)
- mutex.release()
- i += 1
- print i
- if __name__ == '__main__':
- result = []
- data = Queue.Queue()
- for x in xrange(97, 123): # Формируется общая очередь адресов запросов
- data.put('http://aeroportix.ru/kod-iata/' + chr(x))
- lock = threading.Lock()
- threads_starting(data, request_for_iata_codes, lock) # Организация нескольких потоков
- i = 0 # Параметр, для отслеживания выполнения запросов и их обработки
- coding = 'utf-8' # Кодировка сайта
- libdoc = open('Library.txt', 'w')
- data_iata = Queue.Queue() # Общая очередь запросво
- for code in result:
- data_iata.put('http://aeroportix.ru/aeroport/' + code.rstrip())
- threads_starting(data_iata, library_writing, lock)
- libdoc.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement