Archivo de la etiqueta: Beatifulsoup

Beatifulsoup. Web scraping con Python o como las redes sociales pueden estar cambiando la forma de escribir

Boxplot_BeatifulShop

Desde hace tiempo mis frases son más cortas. Creo que es un problema de las redes sociales, sobre todo twitter, que está cambiando mi comportamiento. Para analizar si esto está pasando se me ha ocurrido analizar la longitud de las frases de este blog desde sus inicios y de paso aprovechar para hacer web scraping con la librería Beatifulshop de Python. La idea es recorrer el blog y calcular la longitud de las frases y representar gráficamente como ha ido evolucionando esa longitud.

Podía haber trabajado directamente con la base de datos de wordpress pero he preferido leer las páginas de la web. Hay un problema, si véis el nombre de las páginas no tiene un orden cronológico, son el nombre de la propia entrada [http://analisisydecision.es/los-bancos-lo-llaman-transformacion-digital-yo-lo-llamo-me-da-miedo-facebook/] pero es cierto que se almacena una vista por mes de las entradas publicadas [http://analisisydecision.es/2017/02/] vamos a emplear esas vistas que no recogen la entrada entera pero si las primeras frases, con estas limitaciones vamos a medir la longitud de las frases.

Luego la analizamos paso a paso pero la función de Python que voy a emplear es:

import pandas as pd
from bs4 import BeautifulSoup
import requests
import re
import time 
import string

def extrae (anio, mes):
    url = "http://analisisydecision.es/" + anio + "/" + mes + "/"
    print (url)
    # Realizamos la petición a la web
    pagina = requests.get(url)
    soup = BeautifulSoup(pagina.content, 'html.parser')
    m = str(soup.find_all('p'))
    m = BeautifulSoup(m)
    m = str(m.get_text())
    frases = pd.DataFrame(m.split("."),columns=['frase'])
    frases['largo'] =  frases['frase'].str.len()
    frases['mes'] = anio + mes
    frases['frase'] = frases['frase'].apply(lambda x:''.join([i for i in x if i not in string.punctuation]))
    frases = frases.loc[frases.largo>10]
    time.sleep(60) 
    return frases

Os comento paso a paso, a la función le vamos a pasar el mes y el año y esa será la url que lee http://analisisydecision.es/2017/02/ esa es la web sobre la que vamos a hacer el scraping. Vía request obtenemos la web y BeatifulSoup sólo para quedarnos con el contenido en HTML de la web cargada Sigue leyendo Beatifulsoup. Web scraping con Python o como las redes sociales pueden estar cambiando la forma de escribir