もっと詳しく

今回は、Pythonを使って価格COMのレビューをスクレイプする方法について紹介したいと思います。

今回紹介するソースコードは、こちらのページで紹介した自作のScrape クラスを使っていますので、ご自身の環境で動作させたい場合は、Scrapeクラスも合わせてご利用ください。

また、スクレイプについて詳しく知りたい方は、併せてこちらの記事もご一読ください。

概要

今回も関数として作成しており、引数に価格COM の商品レビューのURLを渡すと、レビュー内容を収集してくれるようになっています。

 URLの例:https://review.kakaku.com/review/J0000037949/#tab’

引用元:価格.COM

関数内部では、こちらの記事で紹介した自作クラス(Scrape)を呼び出しています。

今回、私が解析したレビューはノートPCの製品レビューであるため、別の商品だとうまくスクレイプ出来ない可能性があります。

また、価格COM のページの仕様が変わった場合も同様ですので、その点はあらかじめご了承ください。

関数のソースは以下の様になります。

出来るだけ多くのコメントを記載しましたので、ざっくり目を通していただければ、おおよそのことが分かるかと思います。

def scrape_kakaku(url):
    scr = Scrape(wait=2,max=5)

    #レビューのURLから商品IDの手前までを取り出す
    url = url[:url.find('#tab')]

    for n in range(1,1000):
        #商品の指定ページのURLを生成
        target = url+f'?Page={n}#tab'
        print(f'get:{target}')

        #レビューページの取得
        soup = scr.request(target)
        #ページ内のレビュー記事を一括取得
        reviews = soup.find_all('div',class_='revMainClmWrap')
        #ページ内のすべてと評価を一括取得
        evals = soup.find_all('div',class_='reviewBoxWtInner')
        
        print(f'レビュー数:{len(reviews)}')
        
        #ページ内の全てのレビューをループで取り出す
        for review,eval in zip(reviews,evals):
            #レビューのタイトルを取得
            title = scr.get_text(review.find('div',class_='reviewTitle'))
            #レビューの内容を取得
            comment = scr.get_text(review.find('p',class_='revEntryCont')).replace('<br>','')

            #満足度(デザイン、処理速度、グラフィック性能、拡張性、・・・・・の値を取得
            tables = eval.find_all('table')
            star = scr.get_text(tables[0].find('td'))
            date = scr.get_text(eval.find('p',class_='entryDate clearfix'))
            date = date[:date.find('日')+1]
            ths = tables[1].find_all('th')
            tds = tables[1].find_all('td')

            columns = ['title','star','date','comment']
            values = [title,star,date,comment] 

            for th,td in zip(ths,tds):
                columns.append(th.text)
                values.append(td.text)
            
            #DataFrameに登録
            scr.add_df(values,columns,['<br>'])
        
        #ページ内のレビュー数が15未満なら、最後のページと判断してループを抜ける
        if len(reviews) < 15:
            break

    #スクレイプ結果をCSVに出力
    scr.to_csv("p:/価格com口コミ.csv")

関数の使い方

使い方は簡単で、引数にスクレイプしたい商品のURLを渡すだけです。

scrape_kakaku(スクレイプしたいURL)

scrape_kakaku('https://review.kakaku.com/review/J0000037949/#tab')

下記は、スクレイピングした結果のCSVをEXCELで開いた画面です。

まとめ

今回は、価格COMのレビューをPythonでスクレイピングする方法について紹介しました。

関数化しているので、コピペしてお使い下さい。

尚、今回はノートPCについてのスクレイピングであり、それ以外の商品は確認出来ていませんが、ご了承ください。

途中でエラーになった場合は、ソースのコメントを見ながら、適宜修正して頂ければと思います。

今回のスクレイピングで得たレビューに対して、ワードクラウドや文書要約がしたい場合は、下記URLから関連議事をご参照ください。

【実践】PythonでWordCloud(ワードクラウド)しようぜ!

【実践】Python+pysummarizationで文書要約(テキストマイニング)しよう!

【実践】Python+sumyで文書要約(テキストマイニング)しよう!

今回の記事が皆様のプログラミングの一助になれば幸いです。