La tarea es contar las palabras más frecuentes, lo que extrae datos de fuentes dinámicas.
Primero, cree un rastreador o raspador web con la ayuda del módulo de requests y un hermoso módulo de sopa , que extraerá datos de las páginas web y los almacenará en una lista. Puede haber algunas palabras o símbolos no deseados (como símbolos especiales, espacios en blanco), que se pueden filtrar para facilitar los recuentos y obtener los resultados deseados.
Después de contar cada palabra, también podemos contar la mayoría de las palabras frecuentes (digamos 10 o 20).
Módulos y funciones de biblioteca utilizados:
requests: le permitirá enviar requests HTTP/1.1 y muchas más.
beautifulsoup4 : se utiliza para analizar HTML/XML para extraer datos de archivos HTML y XML.
operator : Exporta un conjunto de funciones eficientes correspondientes a los operadores intrínsecos.
colecciones : implementa tipos de datos de contenedor de alto rendimiento.
A continuación se muestra una implementación de la idea discutida anteriormente:
Python3
# Python3 program for a word frequency # counter after crawling/scraping a web-page import requests from bs4 import BeautifulSoup import operator from collections import Counter '''Function defining the web-crawler/core spider, which will fetch information from a given website, and push the contents to the second function clean_wordlist()''' def start(url): # empty list to store the contents of # the website fetched from our web-crawler wordlist = [] source_code = requests.get(url).text # BeautifulSoup object which will # ping the requested url for data soup = BeautifulSoup(source_code, 'html.parser') # Text in given web-page is stored under # the <div> tags with class <entry-content> for each_text in soup.findAll('div', {'class': 'entry-content'}): content = each_text.text # use split() to break the sentence into # words and convert them into lowercase words = content.lower().split() for each_word in words: wordlist.append(each_word) clean_wordlist(wordlist) # Function removes any unwanted symbols def clean_wordlist(wordlist): clean_list = [] for word in wordlist: symbols = "!@#$%^&*()_-+={[}]|\;:\"<>?/., " for i in range(len(symbols)): word = word.replace(symbols[i], '') if len(word) > 0: clean_list.append(word) create_dictionary(clean_list) # Creates a dictionary containing each word's # count and top_20 occurring words def create_dictionary(clean_list): word_count = {} for word in clean_list: if word in word_count: word_count[word] += 1 else: word_count[word] = 1 ''' To get the count of each word in the crawled page --> # operator.itemgetter() takes one # parameter either 1(denotes keys) # or 0 (denotes corresponding values) for key, value in sorted(word_count.items(), key = operator.itemgetter(1)): print ("% s : % s " % (key, value)) <-- ''' c = Counter(word_count) # returns the most occurring elements top = c.most_common(10) print(top) # Driver code if __name__ == '__main__': url = "https://www.geeksforgeeks.org/programming-language-choose/" # starts crawling and prints output start(url)
[('to', 10), ('in', 7), ('is', 6), ('language', 6), ('the', 5), ('programming', 5), ('a', 5), ('c', 5), ('you', 5), ('of', 4)]