Skip to content

Commit 0a2a7c6

Browse files
committed
🎉 Complement python notes
1 parent 9590a69 commit 0a2a7c6

File tree

14 files changed

+247
-2
lines changed

14 files changed

+247
-2
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ Reuní trabajo relacionado con datos de forma ordenada y organizada que se irá
99

1010
Proyectos realizados con Python
1111

12-
* [News Scrapper with Python full ETL Process](https://github.com/eocode/News-Scrapper)
12+
* [Web Scraper Tools](https://github.com/eocode/Web-Scraper-Tools)
13+
* [News Scraper with Python full ETL Process](https://github.com/eocode/News-Scraper)
1314
* [COVIT-19 México with Python, Sheets and DataStudio](https://github.com/eocode/COVIT-19-Mexico)
1415
* [Rider App with Docker-Django-DRF-Celery-Redis-Postgresql](https://github.com/eocode/Rider-App)
1516
* [Photogram with Django](https://github.com/eocode/PhotoGram)

learn/DataScience/Ingenieria de datos/README.md

+114
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@
1616
- [Herramientas para encontrar DataSets](#herramientas-para-encontrar-datasets)
1717
- [ETL](#etl)
1818
- [Web Scrapping](#web-scrapping)
19+
- [Etica y legalidad](#etica-y-legalidad)
1920
- [Requests](#requests)
2021
- [Beautiful Soup](#beautiful-soup)
2122
- [Solicitudes a la web: Requests](#solicitudes-a-la-web-requests)
2223
- [Page Object Patter (Patrón de diseño)](#page-object-patter-patr%c3%b3n-de-dise%c3%b1o)
24+
- [Scrapping JS usando Selenium](#scrapping-js-usando-selenium)
25+
- [XPath CheatSheet](#xpath-cheatsheet)
26+
- [Scrapy](#scrapy)
27+
- [Proxys](#proxys)
28+
- [Tesseract](#tesseract)
2329
- [Pandas](#pandas)
2430
- [Estructuras de datos: Series](#estructuras-de-datos-series)
2531
- [Estructura de datos: DataFrames](#estructura-de-datos-dataframes)
@@ -32,6 +38,12 @@
3238
- [Sistemas de información](#sistemas-de-informaci%c3%b3n)
3339
- [SQLite](#sqlite)
3440
- [Nube](#nube)
41+
- [Introducción a las APIs](#introducci%c3%b3n-a-las-apis)
42+
- [¿Qué es una API?](#%c2%bfqu%c3%a9-es-una-api)
43+
- [REST](#rest)
44+
- [Documentación](#documentaci%c3%b3n)
45+
- [JSON](#json)
46+
- [Spotify API](#spotify-api)
3547

3648
# Introducción
3749

@@ -249,6 +261,43 @@ Las tecnologías web en principio podemos pensarlas como el internet, pero el in
249261

250262
El internet también se compone de otros pedazos como telefonía(voip), mail(pop3, imap), compartir archivos(ftp). **El internet es una red que une varias redes públicas, privadas, académicas, de negocios, de gobiernos, etc.**
251263

264+
* **Web Scrapping** es el proceso de extracción de datos almacenados en la web.
265+
* Recopilar información almacenada en un servidor web
266+
* **Web Crawling** es para mapear e indexar páginas web para conocer su contenido, así como hace Google y varios buscadores.
267+
* Conocer la estructura de la web
268+
269+
## Etica y legalidad
270+
271+
Es legal... depende
272+
273+
* Estoy violando alguna reglamentación local
274+
* Estoy violando los "Términos y Condiciones" del sitio
275+
* ¿Estoy accediendo a lugares no autorizados?
276+
* ¿Es legal el uso que le voy a dar a los datos?
277+
278+
Estados Unidos lo define de la siguiente manera
279+
280+
> Quienquiera que acceda a una computadora sin autorización o exceda la autorización otorgada y de este modo obtenga información protegida
281+
282+
Toma en cuenta:
283+
* Robots.txt
284+
* Define reglas de buenas prácticas de scrapping
285+
* https://andres-dev.com/guia-completa-robots/
286+
* Mapa del sitio
287+
288+
> Se responsable!
289+
290+
Para México Articulo 211 bis 1:
291+
http://www.diputados.gob.mx/LeyesBiblio/pdf/9_240120.pdf
292+
293+
> “Artículo 211 bis 1.- Al que sin autorización modifique, destruya o provoque pérdida de información
294+
contenida en sistemas o equipos de informática protegidos por algún mecanismo de seguridad, se le
295+
impondrán de seis meses a dos años de prisión y de cien a trescientos días multa.
296+
Al que sin autorización conozca o copie información contenida en sistemas o equipos de informática
297+
protegidos por algún mecanismo de seguridad, se le impondrán de tres meses a un año de prisión y de
298+
cincuenta a ciento cincuenta días multa.”
299+
300+
252301
<hr>
253302

254303
**La web específicamente es un espacio de información** en el cual varios documentos(y otros recursos web) se pueden acceder a través de URLs y vínculos(links). La comunicación se da a través del protocolo HTTP.
@@ -307,6 +356,50 @@ https://medium.com/tech-tajawal/page-object-model-pom-design-pattern-f9588630800
307356
<img src="img/2.png">
308357
</div>
309358

359+
## Scrapping JS usando Selenium
360+
361+
https://selenium-python.readthedocs.io/installation.html
362+
363+
* Instalar los bindings de Selenium para Python. Éstos nos permitirán controlar un navegador desde el código.
364+
365+
``pip install selenium``
366+
367+
``conda install -c conda-forge selenium``
368+
369+
``pip install webdriver-manager``
370+
371+
### XPath CheatSheet
372+
http://labs.timtom.ch/library-webscraping/extras/xpath-cheatsheet.md.pdf
373+
374+
> Selenium se debe de usar unicamente cuándo sea necesario
375+
376+
## Scrapy
377+
378+
* Scrapear en paralelo
379+
* Trabajar con Xpath en lugar de BS4
380+
* Limitar Requests en paralelo
381+
* Setear demoras
382+
* Limitar dominios
383+
384+
## Proxys
385+
386+
http://cualesmiip.com/
387+
https://www.free-proxy-list.net/
388+
https://github.com/Anorov/PySocks
389+
390+
## Tesseract
391+
392+
https://pypi.org/project/tesserocr/
393+
394+
Solución al error RuntimeError: Failed to init API, possibly an invalid tessdata path:
395+
396+
Descargar la carpeta tessdata del siguiente link --> https://github.com/tesseract-ocr/tessdata/archive/master.zip
397+
Descomprimir en el escritorio la carpeta y cambiarle el nombre a solo “tessdata”
398+
Moverla a la ruta donde tienen instalado Python, en mi caso es C:\Program Files (x86)\Python37-32
399+
¡Problema solucionado! 😄
400+
401+
Otra biblioteca es OpenCV para el tratamiento de imagenes
402+
310403
# Pandas
311404

312405
**Pandas nos otorga diversas facilidades para el ““domado de datos””. Nos otorga dos estructuras de datos:**
@@ -430,6 +523,8 @@ La verdad es que para los profesionales de los datos, especialmente los profesio
430523

431524
## SQLite
432525

526+
https://www.sqlalchemy.org/
527+
433528
# Nube
434529

435530
La nube nos da un poder de cómputo casi inimaginable, nos permite procesar terabytes de datos en segundos. La nube se puede usar en dos grandes ocasiones. Cuando los datos ya no caben en tu computadora loca o cuando el tiempo de procesamiento esta siendo muy extenso, es en ese momento donde deberías usar la nube.
@@ -445,3 +540,22 @@ Diversas nubes ya ofrecen paquetes completos para el ciclo de datos, como Google
445540
* BigQuery
446541
* Dataproc
447542
* Firestore
543+
544+
# Introducción a las APIs
545+
546+
## ¿Qué es una API?
547+
548+
Por sus siglas en inglés, una API es una i**nterfaz para programar aplicaciones (Application Programming Interface).** Es decir que es un conjunto de funciones, métodos, reglas y definiciones que nos permitirán desarrollar aplicaciones (en este caso un scraper) que se comuniquen con los servidores de Spotify. **Las APIs son diseñadas y desarrolladas por las empresas que tienen interés en que se desarrollen aplicaciones (públicas o privadas) que utilicen sus servicios.**
549+
550+
## REST
551+
Un término se seguramente te vas a encontrar cuando estés buscando información en internet es REST o RESTful.**Significa representational state transfer y si una API es REST o RESTful, implica que respeta unos determinados principios de arquitectura, como por ejemplo un protocolo de comunicación cliente/servidor (que será HTTP) y (entre otras cosas) un conjunto de operaciones definidas que conocemos como métodos.** Ya veníamos usando el método GET para hacer solicitudes a servidores web.
552+
553+
## Documentación
554+
Las APIs son diseñadas por las mismas empresas que tienen interés en que se desarrollen aplicaciones (públicas o privadas) que consuman sus servicios o información. Es por eso que la forma de utilizar las APIs variará dependiendo del servicio que querramos consumir. No es lo mismo utilizar las APIs de Spotify que las APIs de Twitter. Por esta razón es de suma importancia leer la documentación disponible, generalmente en la sección de desarrolladores de cada sitio.
555+
556+
## JSON
557+
**Json significa JavaScript Object Notation y es un formato para describir objetos que ganó tanta popularidad en su uso que ahora se lo considera independiente del lenguaje.** De hecho, lo utilizaremos en este proyecto por más que estemos trabajando en Python, porque es la forma en la que obtendremos las respuestas a las solicitudes que realicemos utilizando las APIs.
558+
559+
## Spotify API
560+
561+
https://developer.spotify.com/documentation/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import requests
2+
import bs4
3+
response = requests.get('https://eluniversal.com.mx/buscar/amlo')
4+
5+
soup = bs4.BeautifulSoup(response.text, 'html.parser')
6+
links = soup.select('.HeadNota')
7+
print(links)
8+
# billionaries_selected = [billionary.find('h3') for billionary in billionaries]
9+
10+
# for billionary in billionaries_selected:
11+
# print(billionary.text)

learn/Python/Fechas/dates.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from datetime import date, timedelta
2+
3+
mydate = date(year=2015, month=12, day=23)
4+
mydate2 = date.today()
5+
6+
days_5 = timedelta(days=5)
7+
remove_days = date.today() + days_5
8+
print(remove_days)

learn/Python/Fechas/fechas.py

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import datetime
2+
my_time = datetime.datetime.now()
3+
print(my_time)
4+
my_day = datetime.date.today()
5+
print(my_day)
6+
my_birthday = datetime.date(1999,12,20)
7+
print(my_birthday)
8+
9+
# Timestamp
10+
# Tiempo transcurrido
11+
# UNIX 1 enero de 1970, estándart de tiempo para las computadoras
12+
13+
my_timestamp = datetime.date.fromtimestamp(1588048333)
14+
print(my_timestamp)
15+
16+
print(my_day.day)
17+
print(my_day.month)
18+
print(my_day.year)
19+
20+
f = datetime.datetime(
21+
year=2012,month=12,day=15
22+
)
23+
print(f)
24+
25+
# Operaciones con fechas
26+
# Objetos de fechas
27+
#datetime
28+
#date
29+
#time
30+
#timedelta
31+
32+
# Datetime
33+
m1 = datetime.datetime(year = 2020, month=4, day=30, hour=12,minute=34)
34+
m2 = datetime.datetime(year = 1000, month=5, day=1, hour=3,minute=1)
35+
36+
dif = m1 - m2
37+
print(dif)
38+
print(type(dif))
39+
print(dif.seconds)
40+
print(dif.days)
41+
42+
# Date
43+
m1 = datetime.date(year = 2020, month=4, day=30)
44+
m2 = datetime.date(year = 1000, month=5, day=1)
45+
46+
dif = m1 - m2
47+
print(dif)
48+
print(type(dif))
49+
print(dif.seconds)
50+
print(dif.days)
51+
# Formato de fechas
52+
53+
print(my_time)
54+
print(my_time.strftime('%d/%m/%Y'))
55+
print(my_time.strftime('%m/%d/%Y'))
56+
print(my_time.strftime('Estamos en el año: %Y'))
57+
58+
# Investigar strptime
59+
60+
# Timezone
61+
# Módulo pytz

learn/Python/Fechas/timezone.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from datetime import datetime
2+
import pytz
3+
4+
utc_time = datetime.now()
5+
print(f'UTC time: ', utc_time.strftime('%m/%d/%Y, %H:%M:%S'))
6+
7+
my_city_timezone = pytz.timezone('America/Bogota')
8+
my_city_time = datetime.now(my_city_timezone)
9+
print('Bogota: ',my_city_time.strftime('%m/%d/%Y, %H:%M:%S'))
10+
11+
my_city_timezone = pytz.timezone('America/Mexico_City')
12+
my_city_time = datetime.now(my_city_timezone)
13+
print('Ciudad de México: ',my_city_time.strftime('%m/%d/%Y, %H:%M:%S'))
14+
15+
my_city_timezone = pytz.timezone('America/Caracas')
16+
my_city_time = datetime.now(my_city_timezone)
17+
print('Caracas: ',my_city_time.strftime('%m/%d/%Y, %H:%M:%S'))
18+
19+
my_str = '2020-04,12'
20+
my = datetime.strptime(my_str, '%Y-%m,%d')
21+
print(my)

learn/Python/README.MD

+30-1
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ Apuntes, proyectos y códigos realizados con Python.
118118
- [Tipado estático en Python](#tipado-est%c3%a1tico-en-python)
119119
- [Números flotantes en profundidad](#n%c3%bameros-flotantes-en-profundidad)
120120
- [Módulos útiles](#m%c3%b3dulos-%c3%batiles)
121+
- [Manejo de fechas](#manejo-de-fechas)
122+
- [Módulo Datetime](#m%c3%b3dulo-datetime)
123+
- [Timestamp](#timestamp)
124+
- [Universal time coordinator (UTC)](#universal-time-coordinator-utc)
121125

122126
# Pensamiento Computacional
123127
* Conocimiento declarativo
@@ -1668,4 +1672,29 @@ Se puede resolver mediante formateo de Strings
16681672
* **Fractions:** implementa la representación de números fraccionarios como 1/3 de manera exacta
16691673
* **Numpy** que es externa
16701674
1671-
https://docs.python.org/3/tutorial/floatingpoint.html
1675+
https://docs.python.org/3/tutorial/floatingpoint.html
1676+
1677+
# Manejo de fechas
1678+
1679+
Python dispone de un módulo
1680+
1681+
## Módulo Datetime
1682+
```python
1683+
import datetime
1684+
my_time = datetime.datetime.now()
1685+
print(my_time)
1686+
my_day = datetime.date.today()
1687+
print(my_day)
1688+
my_birthday = datetime.date(1999,12,20)
1689+
print(my_birthday)
1690+
```
1691+
1692+
## Timestamp
1693+
Tiempo (segundos) transcurrido desde UNIX 1 enero de 1970, estándart de tiempo para las computadoras
1694+
1695+
```python
1696+
my_timestamp = datetime.date.fromtimestamp(1588048333)
1697+
print(my_timestamp)
1698+
```
1699+
1700+
## Universal time coordinator (UTC)

learn/Python/img/f1.png

28.6 KB
Loading

learn/Python/img/f2.png

38.6 KB
Loading

learn/Python/img/f3.png

47 KB
Loading

learn/Python/img/f4.png

35.3 KB
Loading

learn/Python/img/f5.png

65.6 KB
Loading

learn/Python/img/f6.png

59.4 KB
Loading

learn/Python/img/f7.png

18 KB
Loading

0 commit comments

Comments
 (0)