コード例 #1
0
    def __init__(self, webpage_language,
                       webpage_currency,
                       webpage_usrplace,
                       departure_point,
                       ignored_points,
                       departure_month,
                       departure_year,
                       price_limit,
                       flights_limit,
                       selenium_host,
                       selenium_port,
                       selenium_start_cmd,
                       selenium_load_timeout,
                       map_save_to_dot,
                       map_dot_filename,
                       output_encoding):

        print('Initializing crawler...')

        self.selenium_wrapper = SeleniumWrapper(selenium_host,
                                                selenium_port,
                                                selenium_start_cmd,
                                                selenium_load_timeout,
                                                webpage_language,
                                                webpage_currency,
                                                webpage_usrplace,
                                                departure_month,
                                                departure_year,
                                                output_encoding)

        self.flights_map  = FlightsMap(price_limit, departure_point, ignored_points)
        self.map_analyzer = MapAnalyzer(webpage_currency, output_encoding)

        self.departure_point  = departure_point
        self.price_limit      = price_limit
        self.flights_limit    = flights_limit
        self.map_save_to_dot  = map_save_to_dot
        self.map_dot_filename = map_dot_filename
        self.output_encoding  = output_encoding
コード例 #2
0
class Crawler(object):
    
    def __init__(self, webpage_language,
                       webpage_currency,
                       webpage_usrplace,
                       departure_point,
                       ignored_points,
                       departure_month,
                       departure_year,
                       price_limit,
                       flights_limit,
                       selenium_host,
                       selenium_port,
                       selenium_start_cmd,
                       selenium_load_timeout,
                       map_save_to_dot,
                       map_dot_filename,
                       output_encoding):

        print('Initializing crawler...')

        self.selenium_wrapper = SeleniumWrapper(selenium_host,
                                                selenium_port,
                                                selenium_start_cmd,
                                                selenium_load_timeout,
                                                webpage_language,
                                                webpage_currency,
                                                webpage_usrplace,
                                                departure_month,
                                                departure_year,
                                                output_encoding)

        self.flights_map  = FlightsMap(price_limit, departure_point, ignored_points)
        self.map_analyzer = MapAnalyzer(webpage_currency, output_encoding)

        self.departure_point  = departure_point
        self.price_limit      = price_limit
        self.flights_limit    = flights_limit
        self.map_save_to_dot  = map_save_to_dot
        self.map_dot_filename = map_dot_filename
        self.output_encoding  = output_encoding
        
    def create_map(self):

        self.selenium_wrapper.prepare_browser()
        
        while self.flights_map.points_to_visit() > 0:
            print("Points to check: {0}".format(self.flights_map.points_to_visit()))

            from_point = self.flights_map.pop_next_to_visit()
            self.flights_map.add_to_visited(from_point)

            for to_point_name, to_point_code, to_point_price in self.selenium_wrapper.process_page(from_point):
                if not self.flights_map.process_connection(from_point, to_point_name, to_point_code, to_point_price):
                    break

    def analyze_map(self):

        self.map_analyzer.list_flights(self.flights_map,
                                       self.price_limit, 
                                       self.flights_limit, 
                                       self.departure_point)

        if (self.map_save_to_dot):
            try:
                self.flights_map.save_as_dot(self.map_dot_filename)
            except Exception as err:
                print("Can't save map as dot file. Error message: {0}".format(str(err)))
        
    def cleanup(self):

        self.selenium_wrapper.close()