Web scraping con python y cargar datos a firebase

Web scraping con python y cargar datos a firebase

asumiendo que previamente tienen instalado python3 en su equipo... comencemos

Creamos un entorno virtual (virtual enviroment)

en consola(terminal):

python3 -m venv nombre_carpeta

Activamos el entorno virtual (virtual enviroment)

source nombre_carpeta/bin/activate

Instalamos los siguientes modulos:

pip install requests
pip install pandas
pip install bs4
pip install python-firebase

TIP:

Para chequear los modulos

pip list

TIP2:

En caso de querer salir del entorno virtual (virtual enviroment)

deactivate

Ahora si, empecemos...

1) Necesitaremos crear un archivo con extension .py (ej. miarchivo.py)

vim miarchivo.py

2) importamos los modulos que necesitamos

from bs4 import BeautifulSoup
import requests
import html
import json

import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

3) Para poder acceder a la base de datos de firebase necesitaremos una llave privada

cred = credentials.Certificate("./nombre_de_su_llave.json")

4) Realizamos la conexion con la base de datos de firebase

firebase_admin.initialize_app(cred, {
    'databaseURL': 'https://url_de_su_base_de_datos'
})

5) Creamos una referencia en la Base de datos

ref = db.reference('Nombre_de_su_referencia')

6) Comenzamos con el webscraping ------

6.1) Agregamos los headers

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}

6.2) Creamos una lista de urls (en caso de tener solo uno, puede simplemente declararla ) y dos listas mas que tendran los titulos y la informacion de la pagina

# Lists----------------------------------------
urls = ["https://url1.com","https://url2.com","https://url3.com"] 
title_list = []
page_info = []

6.4) Creamos un Diccionario de datos

# Dictionary-------------------------------------
about_info = {}

6.5) Debido a que en este caso vamos a utilizar varias urls creamos un for loop

for url in urls:
    page = requests.get(url, headers=headers)
    soup = BeautifulSoup(page.content, 'html.parser')

6.6) Imprimimos la respuesta del servidor.

# testing the conection------------
    print(page.status_code)  # if answer=200 ->ok

6.7) obteniendo la informacion del div con la clase class_="my-class"

info = soup.find_all('div', class_="my-class")

7) Como obtuvimoms muchos objetos del div vamos a filtrar solo los de la etiqueta h2

 title = info[0].find('h2')  # getting the data of the h2 tags

8) Como obtuvimoms muchos objetos del div vamos a filtrar solo los de la etiqueta p

paragraph = info[0].find_all('p')  # getting the data of the p tags

9) Utilizamos un list comprehension para almacenar al informacion obtenida

    # list comprehension-----------------------------------
    page_info = [item.text for item in paragraph]
    about_info[title.text] = page_info

9.1) [Opcional] Imprimimos el Diccionario

print(about_info)

10) Enviamos el Diccionario a Firebase

info_ref = ref.child('info') #Creating a child called "info"
info_ref.set(about_info) #Sending info to Firebase