Exemple #1
0
def main_task(max_days, stations_list, mail_list):
    properties = []
    property_urls = []
    db_manager = DbManager()
    domain, initial_search_urls = get_station_based_initial_search_urls(
        max_days, stations_list)
    for initial_search_url in initial_search_urls:
        try:
            results_pages = get_results_pages(domain, initial_search_url)
            for results_page in results_pages:
                domain, individual_house_links = get_individual_house_links(
                    domain, results_page)
                for house_link in individual_house_links:
                    property_data = scrape_individual_house(domain, house_link)
                    db_manager.add_new_property(property_data)
                    if property_data['url'] not in property_urls:
                        properties.append(property_data)
                        property_urls.append(property_data['url'])
        except Exception as e:
            send_email(
                'error@error_email.com',
                f'An error occurred whilst scraping {initial_search_url}: {str(e)}'
            )
            pass

    help_to_buy_filters = ['new', 'luxury', 'help']
    help_to_buy_properties = []
    for item in properties:
        if any(word in item['full_description_text'] for word in help_to_buy_filters) \
            or any(word in item['key_features_text'] for word in help_to_buy_filters):
            help_to_buy_properties.append(item)
            properties.remove(item)

    data = [{
        'type':
        'Possibly Help to Buy',
        'properties':
        help_to_buy_properties,
        'number_of_properties':
        len(help_to_buy_properties),
        'average_price':
        np.average([item['price'] for item in help_to_buy_properties]),
    }, {
        'type':
        'Other Properties',
        'properties':
        properties,
        'number_of_properties':
        len(properties),
        'average_price':
        np.average([item['price'] for item in properties]),
    }]

    send_results(data, mail_list)
Exemple #2
0
def save_to_database_task(property_data):
    db_manager = DbManager()
    db_manager.add_new_property(property_data)