Python x データ分析 | ワードクラウドを用いたデータ可視化_スクレイピング活用

Python x データ分析 | ワードクラウドを用いたデータ可視化_スクレイピング活用

こんにちは!

今回は前回の応用として、Webスクレイピング結果をワードクラウド化するロジックを作ってみます。

スクレイピング

スクレイピング(Scraping)は、Webページからデータを自動的に収集するプロセスを指します。

これは、ウェブサイト上に公開されている情報を抽出し、データベースやスプレッドシートなどの形式で保存・分析するために広く使用されています。

今回はpythonで解析する都合上、BeautifulSoupとrequestsを用います。

サンプルコード

以下がサンプルコードです。

前回の記事のコードを改造しています。(前回

from wordcloud import WordCloud
import matplotlib.pyplot as plt
from wordcloud import STOPWORDS
import MeCab

import requests
from bs4 import BeautifulSoup

#------------------------------------------------------------
# スクレイピング
#------------------------------------------------------------
def scraping(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    text = ""
    articleList = soup.find_all(["p","h1","h2","h3","h4","div"])
    for article in articleList:
        text = text + article.get_text()
    
    return text

#------------------------------------------------------------
# ワードクラウド作成
#------------------------------------------------------------
def make_wordcloud(flg,Web_Site):
    # 形態素解析器としてMeCabを初期化します
    mecab = MeCab.Tagger()

    if flg == 0 :
        # ワードクラウドに表示するテキストデータを用意します
        with open('text_data.txt', 'r', encoding='utf-8') as file:
            text = file.read()

    elif flg ==1:
        text = scraping(Web_Site)

    # 使用するフォントのパスを指定します
    font_path = 'C:/Windows/Fonts/meiryo.ttc'

    # テキストを形態素解析して、単語のリストを取得します
    parsed_text = mecab.parse(text).split('\n')
    words = []
    print(parsed_text)

    for line in parsed_text:
        if line == 'EOS':
            break
        else:
            elements = line.split('\t')
            if len(elements)==2 and elements[1].startswith('名詞,一般'):
                word = elements[0]
                words.append(word)

    #除外ワード
    NGWORD_Lists = ['私','彼ら','そこ','ここ','あそこ','たち','こと','あれ','これ','それ','ため','もの','ん','の','よう','これら']
    for NGWORD in NGWORD_Lists:
        STOPWORDS.add(NGWORD)

    # ワードクラウドを作成します
    wordcloud = WordCloud(width=800, height=400, font_path=font_path,background_color='white').generate(' '.join(words))

    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.show()


if __name__== "__main__":
    #------------------------------------------------------------
    # 設定
    # 0 : text_data.txtから読み取り
    # 1 : Webサイトから読み取り
    #------------------------------------------------------------
    flg = 1
    Web_Site = "https://www.aozora.gr.jp/cards/000081/files/470_15407.html"
    make_wordcloud(flg,Web_Site)

検証

今回はネットで公開されている「青空文庫」からいくつかピックアップしてみます。

セロ弾きのゴーシュ / 宮沢賢治

ページリンク

こころ / 夏目漱石

ページリンク

赤い部屋 / 江戸川乱歩

ページリンク

Webページからデータを取得できていることが分かりました。

今回は以上です!

本日のAmazonおすすめ_Top10

2024-02-27 09:59:24時点