#!/usr/bin/env python
# coding: utf-8

# # Ejercicio Webscrapping con BeautifulSoup4

# ### DOCUMENTACION

# In[ ]:


# https://www.crummy.com/software/BeautifulSoup/bs4/doc/


# ### CODIGO

# In[1]:


import requests
from bs4 import BeautifulSoup
import pandas as pd


# In[2]:


url = 'https://patents.google.com/patent/ES2594053T3/es?q=tarifas+movil&oq=tarifas+movil'
r = requests.get(url, headers = {'User-agent': 'gecko'})


# In[3]:


#Ver resupuesta del servidor despues de nuestra petición
print(r.status_code)


# In[4]:


# Ver el método que se usa
print(r.request.method)


# In[5]:


# Ver el contenido, se guarda todo el html
print(r.text)


# In[6]:


# Ver las cabeceras que nos devuelve la página, esta puede contener cookies, información sobre que tipo de servidor, el tipo de contenido, etc.
print(r.headers)


# In[7]:


# Cabecera de la petición, lo que nosotros le enviamos 
print(r.request.headers)


# In[8]:


# Hacemos la petición y BeautfulSoup parsea el html para que podamos trabajar con el 
soup = BeautifulSoup(r.content, 'html.parser')


# ### Titulos, encabezados, enlaces y formas de acceso

# In[9]:


soup.title


# In[10]:


soup.title.name


# In[12]:


soup.title.string


# In[13]:


# Obtener la información del encabezado principal, elprimer  parrafo, sus clases, etc.


# In[14]:


soup.h1


# In[15]:


soup.h1.string


# In[26]:


soup.a


# In[24]:


soup.a['href']


# In[25]:


soup.a.attrs


# In[30]:


soup.a.get_text()
soup.a.text


# ##### Diferencia entre find y find_all

# In[36]:


soup.find('a')


# In[ ]:


soup.find_all('a')


# In[ ]:


# Podemos iterar a traves de todos los enlaces o elementos del documento mediante codigo
for enlaces in soup.find_all('a'):
    print(enlaces.text)


# In[ ]:


for enlaces in soup.find_all('a'):
    print(enlaces['href'])


# ##### Otras formas de acceder a los elementos

# In[44]:


soup.find(class_ = 'description-paragraph')


# In[ ]:


soup.find_all(class_ = 'description-paragraph')


# ### Obtener elementos basicos dentro de la patente

# In[ ]:


soup


# In[22]:


#Obtenemos el titulo
soup.title.string


# In[24]:


#Obtenemos el id de patente
id_patente = soup.h1.string.split(' - ')[0]
id_patente


# In[26]:


#Obtener inventor
invetor_patente = soup.find('dd',{'itemprop':'inventor'}).get_text()
invetor_patente


# In[31]:


#Obtener compania
compania_pt = soup.find('dd',{'itemprop': 'assigneeCurrent'}).text.rstrip().lstrip()
compania_pt


# In[16]:


#Obtenemos el abstract
abstract = soup.find('div', {'class': 'abstract'}).text
abstract


# In[ ]:


descripcion = soup.find('section',{'itemprop':'description'}).text.rstrip().lstrip()
descripcion


# In[21]:


#Ejercicio de obtención de eventos

df_eventos = pd.DataFrame()
lst = list()

id_patente = soup.h1.string.split(' - ')[0]

for item in soup.find_all('dd', {'itemprop': 'events'}):
    fecha = item.find('time', {'itemprop': 'date'}).text
    accion = item.find('span', {'itemprop': 'title'}).text
    lst.append({
        'id_patente': id_patente,
        'fecha': fecha,
        'accion': accion,
    })

df_eventos = df_eventos.append(pd.DataFrame(lst))
df_eventos
    


# In[ ]:


#Recuperar las patentes que han sido citadas
lst_citaciones = list()
for item in soup.find_all('tr'):
    print(item)


# In[ ]:


for item in soup.find_all('tr', {'itemprop': 'backwardReferencesFamily'}):
    n_publicacion = item.find('span', {'itemprop': 'publicationNumber'}).text
    fecha_prioridad = item.find('td',{'itemprop': 'priorityDate'}).text
    fecha_publicacion = item.find('td', {'itemprop': 'publicationDate'}).text
    print(n_publicacion)
    print(fecha_prioridad)
    print(fecha_publicacion)
    print('______________')


# In[68]:


#Ejercicio de obtención de listados de citaciones

df_citaciones = pd.DataFrame()
lst = list()

id_patente = soup.h1.string.split(' - ')[0]

for item in soup.find_all('tr', {'itemprop': 'backwardReferencesFamily'}):
    n_publicacion = item.find('span', {'itemprop': 'publicationNumber'}).text
    fecha_prioridad = item.find('td',{'itemprop': 'priorityDate'}).text
    fecha_publicacion = item.find('td', {'itemprop': 'publicationDate'}).text
    compania = item.find('span', {'itemprop': 'assigneeOriginal'}).text
    titulo = item.find('td', {'itemprop': 'title'}).text
    lst.append({
        'id_patente': id_patente,
        'num_publicacion': n_publicacion,
        'fecha_prioridad': fecha_prioridad,
        'fecha_publicacion': fecha_publicacion,
        'compania': compania,
        'titulo': titulo
    })

df_citaciones = df_citaciones.append(pd.DataFrame(lst))
df_citaciones


# In[11]:


#Ejercicio de obtención de listados de citaciones

df_citadoras = pd.DataFrame()
lst = list()

id_patente = soup.h1.string.split(' - ')[0]

for item in soup.find_all('tr', {'itemprop': 'forwardReferencesFamily'}):
    n_publicacion = item.find('span', {'itemprop': 'publicationNumber'}).text
    fecha_prioridad = item.find('td',{'itemprop': 'priorityDate'}).text
    fecha_publicacion = item.find('td', {'itemprop': 'publicationDate'}).text
    compania = item.find('span', {'itemprop': 'assigneeOriginal'}).text
    titulo = item.find('td', {'itemprop': 'title'}).text
    lst.append({
        'id_patente': id_patente,
        'num_publicacion': n_publicacion,
        'fecha_prioridad': fecha_prioridad,
        'fecha_publicacion': fecha_publicacion,
        'compania': compania,
        'titulo': titulo
    })

df_citadoras = df_citadoras.append(pd.DataFrame(lst))
df_citadoras


# In[45]:


# Recuperar todos los elementos que hemos recogido


# In[ ]:




