خزش در صفحه وب و یافتن کلمات مکرر با پایتون — راهنمای کاربردی

در این مطلب، چگونگی خزش در صفحه وب و یافتن کلمات مکرر با پایتون مورد بررسی قرار خواهد گرفت. در واقع، در ادامه برنامه پایتونی ارائه می‌شود که با خزش در یک صفحه وب، کلمات مکرر موجود در آن را پیدا می‌کند.

در این راستا، ابتدا، به کمک ماژول‌های «requests» و «beautiful soup» که داده‌ها را از صفحه وب استخراج می‌کنند، یک خزنده وب ساخته می‌شود. این خزنده وب، داده‌ها را از صفحه وب استخراج و آن‌ها را در یک لیست ذخیره‌سازی می‌کند. این امکان وجود دارد که برخی از کلمات یا نمادهای ناخواسته (مانند نمادهای ویژه، فضاهای خالی) را به منظور تسهیل شمارش و به دست آوردن نتایج مورد انتظار فیلتر کرد. پس از محاسبه تعداد تکرار هر کلمه، می‌توان کلمات دارای بیشترین تکرار (۱۰ یا ۲۰) را به دست آورد.

ماژول‌ها و توابع کتابخانه‌ای استفاده شده

  • requests: امکان ارسال درخواست‌های HTTP/1.1 و بسیاری از دیگر موارد را فراهم می‌کند.
  • beautifulsoup4: برای بیرون کشیدن داده‌ها از فایل‌های HTML و XML قابل استفاده است.
  • operator: یک مجموعه از توابع موثر متناظر با عملگرهای ذاتی را «صادر» (Exports) می‌کند.
  • collections: نوع داده با کارایی بالا را پیاده‌سازی می‌کند.

در ادامه، ایده مطرح شده در بالا، در «زبان برنامه‌نویسی پایتون» (Python Programming Language) پیاده‌سازی شده است.

# Python3 program for a word frequency 
# counter after crawling 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 (0, len(symbols)): 
            word = word.replace(symbols[i], '') 
              
        if len(word) > 0: 
            clean_list.append(word) 
    create_dictionary(clean_list) 
  
# Creates a dictionary conatining each word's  
# count and top_20 ocuuring 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 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 occuring elements 
    top = c.most_common(10) 
    print(top) 
  
# Driver code 
if __name__ == '__main__': 
    start("https://www.geeksforgeeks.org/programming-language-choose/")

خروجی قطعه کد بالا به صورت زیر است.

[(‘to’, 10), (‘in’, 7), (‘is’, 6), (‘language’, 6), (‘the’, 5),
(‘programming’, 5), (‘a’, 5), (‘c’, 5), (‘you’, 5), (‘of’, 4)]

منبع [+]

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *