Как я могу go собирать данные с веб-сайта и обновлять файл с новой информацией каждый день, сохраняя старые данные? - PullRequest
0 голосов
/ 29 мая 2020

Изначально я планировал использовать файл CSV, однако для этого мне потребовалось бы вручную входить в VScode каждый день и запускать мой скрипт для добавления данных в файл csv, и он заменит старые данные, которые я ранее ввел .

1 Ответ

1 голос
/ 29 мая 2020

Если ваш очищенный набор данных невелик, очистите данные во вложенном списке словарей со структурой [{<column1>: <data>, <column2>: <data>, ...}, ...] для каждой строки, которую вы хотите сохранить, затем используйте эту функцию, чтобы добавить этот словарь в файл csv, выполнив append_csv_dict(<path_to_your_csv>, <your_dictionary>) :

import csv

def append_csv_dict(path, data):
    '''
    Append a csv with a dictionary keys as column headers
    Args:
        path (str): Path to the csv file
        data (dict or list): Dictionary or list(dict) with keys as 
                             column  headers and values as column data
    '''
    with open(path, 'a') as file:
        # set the field names to the keys of the dictionary or keys of the first item
        fieldnames = list(data.keys()) if isinstance(data, dict) else data[0].keys()
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        # write the header if the file is new
        if file.tell() == 0:
            writer.writeheader()
        if isinstance(data, dict):
            fieldnames = list(data.keys())
            # write the row
            writer.writerow(data)
        elif isinstance(data, list):
            # write the rows if it is a list
            writer.writerows(data)

# some example data, you can do one dictionary at a time if you only do one row per day
scraped_data = [
    {
        'first_name': 'John',
        'last_name': 'Do',
        'age': 31
    },
    {
        'first_name': 'Jane',
        'last_name': 'Do',
        'age': 33
    },
    {
        'first_name': 'Foo',
        'last_name': 'Bar',
        'age': 58
    }
]

append_csv_dict('./scrape.csv', scraped_data)

Вывод (scrape.csv):

first_name,last_name,age
John,Do,31
Jane,Do,33
Foo,Bar,58
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...