Closed oCaioOliveira closed 2 years ago
A ideia desse estudo é aprender, resumidamente, a sintaxe de python para algumas estruturas básicas de programação. Para tanto, em cada conceito estudado, farei um comparativo entre a implementação daquele conceito na linguagem C e na linguagem Python. Escolhi C por ser a linguagem que tenho mais afinidade.
Entrada em C: função scanf Entrada em Python: Função input. Ela retorna um dado do tipo de dado que foi fornecido na entrada. exemplo em python: x = input() #a variável x recebe um dado do tipo recebido na entrada com o mesmo valor.
Saída em C: função printf Saída em Python: função print() exemplo em python: x = "Qualquer coisa" print(x) OBS: a função print só printa um mesmo tipo de dado. Portanto, caso eu queira imprimir, por exemplo, uma string e logo em seguida um int, eu devo fazer o casting do valor int para string.
-Operadores aritméticos São os mesmos de C, ou seja, '+' para adição, '%' para módulo, etc. No entanto, Python tem 2 operadores aritméticos a mais: O operador realiza a exponenciação. Então xy = x^y. Em C, deveriamos importar a função pow() da biblioteca math.h ou fazer a exponenciação usando algum algoritmo. O operador // realiza a divisão entre dois números, e retorna o inteiro.
-Operadores de atribuição São os mesmos de C com algumas adições. O operador '=' atribui valor a uma variável, e operadores do tipo "var1 (operador1)= var2" são a mesma coisa que "var1 = var1(operador1)var2". Por exemplo: x+=y significa x = x+y. E por aí vai. A diferença é que, além dos operadores de C, também temos operadores novos em Python.
-Operadores relacionais São os mesmos de C (==, >=, <=, etc).
-Operadores lógicos Em C: 'E': && 'OU': || 'NÃO': !
exemplo: int x=10; return (x>5 && !(x==8) || x ==20); //retorna 1
Em Python: 'E': and 'OU': or 'NÃO': not
exemplo: x = 10 validade = (x>5 and not(x==8) or x ==20) #Validade = True
Em C, cada variável tinha um tipo específico associado a ela. Um inteiro sempre seria inteiro, um char seria sempre char e por aí vai. Em Python, as variáveis podem, em um momento, assumir um tipo de dados, e, em outro momento, um tipo diferente. Por isso, em Python, não existe "declaração" de variáveis, mas sim "atribuição" de variáveis. Exemplo em Python: x = 10 print(x) #printa 10 x = "ola" print(x) #printa "ola"
Dito isso, os tipos de dado são de texto, numeros, sequências... conferir a bibliografia para mais detalhes.
Em C: if(condição) procedimento; else procedimento; else if(condição) procedimento;
Em Python: if condição: procedimento else: procedimento elif condição: procedimento
Python não tem switch-case.
Em C: for(índice = algum_valor; condição;incremento, decremento, etc) procedimento; while(condições) procedimento; do(condições) procedimento; while(condições);
Em Python: for (indice) in range(valmax): procedimento while condições: procedimento
Arrays não existem em python(pelo menos, não na biblioteca padrão). No entanto, existe o conceito de lista, que funciona como um array. A diferença principal é que enquanto os arrays de C só guardam o mesmo tipo de dado, as listas de Python guardam qualquer tipo de dado. Em C: int arr[tamArr] = {...} //só pode conter elementos do tipo inteiro
Em Python: arr = [...] #pode conter elementos de qualquer tipo de dado
-Acessando elementos do array Em C: int v[tam] = {...} para acessar o valor que o array guarda na posição x, basta utilizar v[x]
Em Python: v = [...] Para acessar o valor que o array guarda na posição x, basta utilizar v[x]
Em C: tipoDeDadoRetorno funcao(parametros) { procedimentos; return algo; } Em Python: def funcao(argumentos): procedimentos return algo
Python é uma linguagem aparentemente muito poderosa e fácil de se utilizar. Notei, também, que cada uma dessas estruturas não necessita de chaves delimitando seus procedimentos. O que define se um procedimento faz parte de uma função é a identação do código.
https://www.w3schools.com/python/python_datatypes.asp https://www.geeksforgeeks.org/data-types-in-c/ https://www.youtube.com/watch?v=rfscVS0vtbw&list=WL&index=3&t=5120s
O desenvolvimento web é dividido em front-end e back-end. O backend é todo o desenvolvimento e estruturas que possibilitam a operação do sistema, não é visto pelo cliente e está associado com o Server Side, como a própria tradução diz, o lado do servidor. O desenvolvimento do backend está voltado para os servidores, APIs, bancos de dados, segurança da informação, etc. Dentre as linguagens mais utilizadas temos o python.
É uma linguagem de programação de alto nível, muito eficiente e de simples sintaxe e entendimento, possui tipagem fraca e pode ser utilizada nos mais diversos contextos. Tem diversas vantagens em sua utilização, incluindo a comunidade open source gigantesca, grande quantidade de suporte e documentação.
Curso introdutório a python Primeiros passos python
É um framework em python para facilitar o desenvolvimento web. Foi feito para suportar projetos escaláveis. Bem completo e traz diversas soluções.
Facilidades herdadas do python. Permite criação de uma aplicação completa com pouco código.
Arquitetura utilizada no Django:
MVT:
Comparação entre BeautifulSoup e scrapy
Tutorial de web scraping com Scrapy Web Scraping com BeautifulSoup
Scapy: É um framework em python que permite o crawler de diversas páginas web, sites e guardar os dados que tem . É bem completo e não depende de outras adições para fazer o scraping, apesar de suportar outras extensões. Tem vantagens por ser bem rápido.
BeautifulSoup: Diferente do scarpy, beautifulsoup é uma biblioteca de análise em python que possibilita pegar os dados de páginas html e xml. Ele depende de outras ferramentas para que consiga rastrar e pegar dados de páginas web, mas em questão de usabilidade e facilidade é bem vantajoso, portanto, é recomendado para projetos que nao sejam muito grandes e é essencial para iniciantes.
O Python é uma linguagem de programação de alto nível e orientada à objetos, que foi introduzida ao mundo em 1991 e hoje, é uma das linguagens de programação mais utilizadas em todo mundo!.
O Scrapy é um framework rápido e de alto nível para web scraping, ou seja, para a retirada de dados de sites da web.
O Selenium é uma API open source de Python utilizada principalmente para automatizar testes nos navegadores da web.
O Beautiful Soup é uma biblioteca de Python para extração de dados de documentos HTML e XML.
O MongoDB é um sistema que guarda bancos de dados noSQL orientado à documentos que é usado para guardar grandes volumes de dados. Ao invés de utilizar dos conceitos de tabelas e colunas assim como os bancos de dados relacionais, o MongoDB usa coleções e documentos. Os documentos consistem em dados "chaveados" e são a unidade básica de dados no MongoDB. Documentos estes que são guardados no formato .bson.
{
"_id": "d61g25d6f1d512e161791"
"nome": "João",
"tags": ["Masculino", "Estudante"],
"data-nasc": "09.09.2009"
}
Agora que já temos um conhecimento básico sobre o que é o MongoDB e como ele funciona, podemos partir para a prática. Para realizar a instalação do MongoDB de acordo com o seu sistema operacional, siga os passos fornecidos pela documentação do MongoDB. Neste tutorial, abordaremos a utilização no sistema operacional Ubuntu, que é uma distribuição Linux.
Importar a public key usada pelo gerenciador de pacotes
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
Caso a operação acima não retorne um OK
:
sudo apt-get install gnupg
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
Criar um arquivo .list para o MongoDB
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/_Ubuntu_ focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
Atualizar os pacotes locais
sudo apt-get update && sudo apt-get upgrade
Instalar o pacote oficial mais recente e estável do MongoDB
sudo apt-get install -y mongodb-org
Conferir a versão instalada
mongod --version
Para fazer o banco de dados do MongoDB iniciar no seu terminal, basta rodar o comando:
sudo systemctl start mongod
Failed to start mongod.service: Unit mongod.service not found.
, basta rodar o comando a seguir no seu terminal:sudo systemctl daemon-reload
E rodar novamente o comando sudo systemctl start mongod
.
Para confirmar que o MongoDB iniciou corretamente, basta rodar o comando seguinte em seu terminal:
sudo systemctl status mongod
E por fim, para fechar o MongoDB, basta rodar:
sudo systemctl stop mongod
Mas como desejamos utilizar o mongosh, podemos novamente iniciar o MongoDB com o seguinte comando:
sudo systemctl restart mongod
E para utilizar o mongosh, basta rodar em seu terminal:
mongosh
Para sair do mongosh, basta pressionar 'ctrl+d' em seu teclado.
O compass é um sistema que proporciona uma GUI (Graphical User Interface) para a visualização dos DBs, coleções e documentos salvos.
Novamente, iremos considerar o sistema operacional Ubuntu em sua versão LTS mais atual, o 20.04.
Baixe o MongoDB Compass
wget https://downloads.mongodb.com/compass/mongodb-compass_1.30.1_amd64.deb
Instale o MongoDB Compass
sudo dpkg -i mongodb-compass_1.30.1_amd64.deb
Para inicial o MongoDB Compass, temos 2 opções:
mongodb-compass
Quando iniciar o MongoDB compass e passar pelo tutorial, iremos ver uma tela como a mostrada abaixo:
Assim, podemos selecionar o opção Connect sem digitar nenhuma connection string para nos conectarmos ao DB local iniciado no Terminal. E com isso, veremos uma tela parecida com a tela a seguir:
Podemos perceber que o MongoDB cria automaticamente 3 DBs chamados: admin, config e local. E assim, podemos selecionar a opção Create database para criar um DB em sua máquina local. E com ela, devemos dar um nome ao DB e outro à uma coleção que fará parte do DB.
Com isso, apenas resta selecionar a opção Create database e iremos ver o DB criado na lista de DBs mostrada no Compass.
Para acessar as coleções de dados disponíveis dentro do DB, precisamos apenas de clicar no painel do DB. Posteriormente, na tela de visualização das coleções do DB, podemos selecionar a coleção que criamos para acessar os dados guardados dentro da mesma.
Nós poderíamos adicionar, remover, editar e pesquisar dados apenas utilizando a GUI do MongoDB Compass, porém, o objetivo deste tutorial é mostrar como acessar, acrescentar, remover e editar dados dentro de um DB por meio de um código em python. Assim, podemos prosseguir para o próximo tópico.
:exclamation: É importante que você disconecte e depois reconecte do DB no MongoDB Compass para ver a seguinte informação na sua tela:
Ela é a connection string chamada de cluster no código python que iremos fazer.
Utilizaremos o python para o acesso ao DB por ser uma linguagem de programação moderna, rápida e que possui diversos tutoriais na web. Com isso, podemos notar que o python possui diversar bibliotecas para manipulação de uma enorme quantidade de coisas, mas como o intuito deste tutorial é demonstrar como realizar o acesso aos dados guardados dentro do DB, iremos utilizar uma biblioteca do python mais conhecida como pymongo.
Primeiro, devemos instalar o pymongo em nosso sistema operacional linux. Para isso, devemos seguir os seguintes passos:
pip install pymongo
Aqui, deixo a documentação do pymongo para que seja de fácil acesso à todos. E a partir de agora, irei mostrar um código de teste que irá realizar a adição, procura, remoção e amostragem de dados no DB por meio de um código python.
Notas: Substituir as seguintes variáveis pelos nomes escolhidos do DB e da coleção criada
db = client.<nomedoDBcriado>
<nomedacoleçãocriada> = db.<nome-da-coleção-criada> #No código abaixo é a variável testing
cluster = "<endereço-do-DB-criado>" #Pode-se obter este endereço por meio do MongoDB Compass
from pymongo import MongoClient #Importando o MongoClient de dentro do pyMongo
#Abaixo temos a variável com a string de conexão ao DB
cluster = "mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.2.2"
#Conecta o client ao cluster (conjunto de DBs) especificado acima
client = MongoClient(cluster)
#Lista todos os DBs e seus nomes
print(client.list_database_names())
#Acessa o DB chamado testDB
db = client.testDB
#Lista todas as coleções dentro do DB selecionado acima
print (db.list_collection_names())
#Dicionário contendo os dados a serem adicionados ao DB
d = {
"nome": "Harry Potter",
"profissão": "Auror",
"casa": "Grifinória",
"dado notável": "Campeão do tri-bruxo",
"data-nasc": "31.07.1980"
}
#puxando a coleção testing de dentro do DB
testing = db.testing
#Inserindo um elemento dentro da coleção especificada do DB
testing.insert_one(d)
#Dicionário com uma coleção de 2 dados a serem adicionados ao DB
d2 = [{
"nome": "Harry Potter",
"profissão": "Auror",
"casa": "Cópia",
"dado notável": "Cópia",
"data-nasc": "31.07.1980"
},
{
"nome": "Herminone Granger",
"profissão": "Ministra da magia",
"casa": "Grifinória",
"dado notável": "Ordem da fênix",
"data-nasc": "19.09.1979"
},
{
"nome": "Ronald Weasley",
"profissão": "Auror",
"casa": "Grifinória",
"dado notável": "Ordem da fênix",
"data-nasc": "01.03.1980"
},
{
"nome": "Tom Marvolo Riddle",
"profissão": "O senhor das trevas",
"casa": "Sonserina",
"dado notável": "Herdeiro de Salazar Sonserina",
"data-nasc": "31.12.1926"
},
{
"nome": "Draco Lucius Malfoy",
"profissão": "Assistente à ministra da magia",
"casa": "Sonserina",
"dado notável": "Apanhador (quadribol)",
"data-nasc": "05.06.1980"
},
{
"nome": "Gilderoy Lockhart",
"profissão": "Escritor",
"casa": "Corvinal",
"dado notável": "Professor",
"data-nasc": "26.01.1964"
},
{
"nome": "Albus Dumbledore",
"profissão": "Ex-diretor de hogwarts",
"casa": "Grifinória",
"dado notável": "Ordem de merlin",
"data-nasc": "X.08.1881"
},
{
"nome": "Newton Scamander",
"profissão": "Magizoologista",
"casa": "Lufa-lufa",
"dado notável": "Escritor",
"data-nasc": "24.02.1897"
}]
#Inserir vários dados na coleção especificada do DB
testing.insert_many(d2)
print("------------------------------------------------")
#Procurar por UM dado
result = testing.find_one({"nome": "Gilderoy Lockhart"}) #Método para procurar o primeiro dado que é compatível com a busca
print(result) #Imprime o resultado encontrado
print("------------------------------------------------\n")
#Procura por todos os resultados disponíveis
resultados = testing.find({"casa": "Sonserina"})
#Imrimir todos os resultados encontrados, um a um
print("------------------------------------------------")
for resultado in resultados:
print(resultado)
print("------------------------------------------------")
print()
#imprime uma contagem de todos os documentos inseridos na coleção
print("Total de personagens no DB:", testing.count_documents({}))
#Imprime uma contagem dos documentos que contém o argumento passado
print("Total de personagens de Grifinória no DB:", testing.count_documents({"casa": "Grifinória"}))
#Deleta o primeiro dado compatível encontrado
testing.delete_one({"casa": "Cópia"})
print("Total de personagens no DB após a remoção da cópia:", testing.count_documents({}))
#Atualiza o dado desejado
testing.update_one({"nome": "Newton Scamander"}, {"$set": {"profissão": "Escritor"}})
print("Pressione qualquer tecla para encerrar...")
input()
#Deleta todos os dados
testing.delete_many({})
Para ver o resultado, basta digitar em seu terminal:
python3 <nome-do-arquivo>.py
:exclamation: Durante a execução do programa, não encerrá-lo, utilizar o MongoDB Compass para visualizar os dados.
Descrição
Pesquisar tecnologias relacionadas ao Back-end (Python e suas bibliotecas Scrapy e Beautiful Soup) e iniciar o desenvolvimento dessa área do projeto.
Tarefas
Realizar os seguintes passos:
Critérios de aceitação