Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Qual a melhor forma de automatizar um Script .ipynb no Windows?

Pessoal, bom dia!

Tenho um script que basicamente extrai dados de determinado site e insere os mesmos num SQL. Até aí tudo bem e funciona perfeitamente.

Agora eu quero que isso seja feito diariamente sem eu precisar ficar executando o script. Na internet me deparei com a biblioteca schedule para Python. Minha dúvida de INICIANTE: essa biblioteca permitiria que a atividade fosse executada, mesmo quando eu reinicio o meu computador (eu acho que não né rss)?

Sou obrigado a recorrer ao Task Scheduler do Windows?

6 respostas
solução!

Olá Roger, tudo bem ? Espero que sim.

Eu entendo que o melhor caminho é o Task Scheduler do Windows, porque utilizando a biblioteca schedule teremos o nosso código rodando o tempo todo na maquina.

Nesse tópico explico como fiz para automatizar um script meu, que combinado com essa biblioteca schedule pode cumprir o seu objetivo e também faço a recomendação de um tutorial utilizando o Task Scheduler do Windows.

Se tiver algum problema para seguir o tutorial avisa aqui no fórum que eu te ajudo, bons estudos, abraço.

: )

Igor, boa noite!

Primeiramente, muito obrigado pela atenção. O que acontece? Meu script funciona normalmente no IDLE (Jupyter ou Visual Code), porém o mesmo não roda no PROMPT do Windows (aparece o erro NameError: name 'null' is not defined na linha 181 do código).

Usando o Scheduler, eu programo a Task, ela roda normalmente, porém meu SCRIPT não funciona - simplesmente não acontece nada. Portanto, primeiro vou tentar fazer o SCRIPT funcionar no PROMPT e depois tento utilizar o Scheduler novamente.

Obrigado pela atenção!

Olá Roger.

Entendi, mas se quiser pode colocar seu código e erro completo aqui, dessa maneira consigo te ajudar. Você transformou ele de .ipynb para .py ?

Bons estudos, abraços.

Igor, boa noite!

Vamos lá, abreviei meu código (abaixo) aqui para você me auxiliar. Basicamente, o que ele faz é acessar a tabela HTML da Caixa com resultado da loteria e colocar isso num DataFrame via Pandas. O código abaixo, num arquivo .ipynb roda perfeitamente no Jupyter e/ou Visual Code.

def frame_lotofacil ():
    !pip install lxml
    !pip install requests
    !pip install mysql.connector

    # Libs para extrair e manipular os dados

    import urllib.request, urllib.parse, urllib.error
    import requests, zipfile, io
    import numpy as np
    import pandas as pd
    import os
    import pathlib
    from datetime import date

    # Libs para conectar com MySQL
    import mysql.connector
    from mysql.connector import Error

    # Download dos dados da LOTOFÁCIL no site da Caixa

    url = 'http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_lotfac.zip'

    r = requests.get(url, stream =True)
    check = zipfile.is_zipfile(io.BytesIO(r.content))
    while not check:
        r = requests.get(url, stream =True)
        check = zipfile.is_zipfile(io.BytesIO(r.content))
    else:
        z = zipfile.ZipFile(io.BytesIO(r.content))
        z.extractall()


    # Criação do DataFrame, excluindo os dados duplicados e resetando o index.
    lotofacil = pd.read_html('d_lotfac.htm', decimal=',')
    lotofacil = pd.DataFrame(lotofacil[0])
    lotofacil = lotofacil.drop_duplicates(subset='Concurso', keep='first')
    lotofacil = lotofacil.reset_index(drop=True)
    return lotofacil.tail()

frame_lotofacil()

Aí eu copiei o mesmo código e colei num arquivo com extensão .py, porém percebi que o mesmo não funciona. Pelo o que entendi, trata-se de um erro de sintaxe no código (me corrija se eu estiver errado rss). Me toquei disso quando você me questionou se eu havia convertido o arquivo para .py.

Minha pergunta: qual a forma correta para converter o arquivo .ipynb para .py?

Obrigado mais uma vez!

Olá Roger, tudo bem ? Espero que sim.

Desculpa pela demora no retorno.

Consegui rodar o código, só cometei a parte das instalações do pip.

def frame_lotofacil ():
    #!pip install lxml
    #!pip install requests
    #!pip install mysql.connector

Consegue me mandar o erro completo que está recebendo ?

Bons estudos, abraço.

Igor, bom dia!

Desculpa a demora em retornar. Nesse meio tempo consegui automatizar a inserção dos dados. Primeiro, tratei de gerar um arquivo .py conforme você havia trazido. Depois, criei o arquivo .bat para configurar a task no Scheduler do Windows.

Ponto de atenção: para instalar os módulos coloquei os comandos diretamente no arquivo .bat, conforme abaixo (exemplo resumido):

cd "C:\Users\Roger\Documents
python -m pip install -U requests
python insert_data_sql_lotofacil.py
pause

Fiz isso, pois o tradicional !pip install pacote dentro do script python não funcionou no PROMPT.

Por fim, utilizei esse "tutorial" para fazer funcionar aqui https://www.thewindowsclub.com/how-to-schedule-batch-file-run-automatically-windows-7

Obrigado pela atenção!