Contador de palabras de una web, en Python

Una vez me propusieron hacer el siguiente programa: "Un programa que cuente las palabras que aparecen en una web cualquiera y ordenarlas alfabéticamente". En ese momento me pregunté que para qué podría alguien querer algo así, supongo que para darle algún fin estadístico. En un principio pensé hacerlo en Perl, pero por alguna razón me vino a la cabeza BeutifulSoup para Python. Y parece que fue una buena idea. Aquí un pequeño ejemplo que funciona bien.

#!/usr/bin/python
 
import sys, re, string, urllib
# Se requiere el paquete BeautifulSoup
from bs4 import BeautifulSoup
 
# La URL es el primer argumento que recibe el programa.
url = sys.argv[1]
 
# Conversion de codigo HTML a texto plano.
texto = BeautifulSoup(urllib.urlopen(url)).get_text()

# Remplazo todos los caracteres ASCII de puntuacion por espacios e inicializa el Array
palabrasArray = re.sub('[%s]' % re.escape(string.punctuation), ' ', texto).split()
 
# Ordenacion sin repeticion de todos los elementos del Array
numero = 0
for i in sorted(set(palabrasArray)):
    # Imprime solo las palabras con caracteres alfabeticos.
    if (i.isalpha() == True):
        numero += 1
        print("%.3d %s" % (numero, i))

Un ejemplo de uso sería:

python contadorDePalabras.py http://www.gnu.org/

Y tiene una salida como esta:

001 About
002 Access
003 Action
004 Add
005 Allan
006 Also
007 America
008 April
009 Art
010 Attribution
011 BY
012 C
013 CC
014 Call
015 Can
016 Canada
017 Christopher
018 Chrome
019 Claim
020 Common
021 Commons
...

Seguro que se puede hacer mejor y mas profesional, pero así de primeras cumple su función.

5 opiniones en “Contador de palabras de una web, en Python”

  1. Hola me ha encantado el articulo, llevaba tiempo interesado en esto porque lo estuve cuestionando el otro dia con un amigo, al final tenia yo razón por lo que veo. Enhorabuena al autor esperemos que sigan así. Gracias, un abrazo fuerte.

    1. En Python 2.7, las librerías que utilicé son las que vienen en la cabecera del script:

      import sys, re, string, urllib
      from bs4 import BeautifulSoup

      Para ejecutarlo solo lo tienes que guardar en un archivo con extensión ".py", por ejemplo"contadorDePalabras.py" y luego en una shell ejecutar el siguiente comando:

      python contadorDePalabras.py http://www.gnu.org/

      Has de pasarle la URL a analizar como argumento, tal y como se muestra en el comando anterior.

  2. Hola, Javier.
    Antes de nada felicitarte por el trabajo. Verás, precisamente, como dices en el post, esto podía servirle a alguien para fines estadísticos. A mi, exactamente, para un trabajo de la universidad. El problema es que no tengo ni idea de python. Entonces, desde mi total desconocimiento, te pregunto si podrías colgar el archivo o algo para que solo lo tenga que ejecutar. Si fuera posible me salvarías la vida.

    Muchísimas gracias. Un saludo.

    1. Ya he conseguido hacer que funcione tras un poco de investigación, y me he dado cuenta de que no me sirve pues creía que contaba el número de veces que aparece una misma palabra, y no lo hace. De todas formas muchísimas gracias.
      Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.