/
scraper.py
67 lines (52 loc) · 1.86 KB
/
scraper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# -*- coding: utf-8 -*-
import csv
import datetime
import os
import time
import pandas as pd
import scraperwiki
from sqlalchemy import create_engine
import utils
os.environ['SCRAPERWIKI_DATABASE_NAME'] = 'sqlite:///data.sqlite'
def main():
# a data de referência será sempre d-2
data_referencia = datetime.date.today() - datetime.timedelta(days=2)
# se não é dia útil
if not utils.isbizday(data_referencia):
print('Nenhum dado capturado, pois a data não é dia útil', data_referencia)
return False
url_base = 'http://dados.cvm.gov.br/dados/FI/CAD/DADOS/inf_cadastral_fi_{}.csv'
url = url_base.format(data_referencia.strftime('%Y%m%d'))
df = pd.read_csv(
url,
sep=';',
encoding='latin1'
)
# transforma o campo CO_PRD
df['CO_PRD'] = df['CNPJ_FUNDO'].str.replace('.', '')
df['CO_PRD'] = df['CO_PRD'].str.replace('/', '')
df['CO_PRD'] = df['CO_PRD'].str.replace('-', '')
df['CO_PRD'] = df['CO_PRD'].str.zfill(14)
df['DT_REG'] = pd.to_datetime(
df['DT_REG'], errors='coerce').dt.strftime('%Y-%m-%d')
df['DT_CONST'] = pd.to_datetime(
df['DT_CONST'], errors='coerce').dt.strftime('%Y-%m-%d')
df['DT_CANCEL'] = pd.to_datetime(
df['DT_CANCEL'], errors='coerce').dt.strftime('%Y-%m-%d')
df['DT_INI_SIT'] = pd.to_datetime(
df['DT_INI_SIT'], errors='coerce').dt.strftime('%Y-%m-%d')
df['DT_INI_ATIV'] = pd.to_datetime(
df['DT_INI_ATIV'], errors='coerce').dt.strftime('%Y-%m-%d')
# print(df.columns.tolist())
df = df.astype(str)
engine = create_engine('sqlite:///data.sqlite', echo=True)
sqlite_connection = engine.connect()
print('Importando usando pandas to_sql')
df.to_sql(
'swdata',
sqlite_connection,
if_exists='replace',
index=False
)
if __name__ == '__main__':
main()