今回は、Pythonを使って価格COMのレビューをスクレイプする方法について紹介したいと思います。
今回紹介するソースコードは、こちらのページで紹介した自作のScrape クラスを使っていますので、ご自身の環境で動作させたい場合は、Scrapeクラスも合わせてご利用ください。
また、スクレイプについて詳しく知りたい方は、併せてこちらの記事もご一読ください。
概要
今回も関数として作成しており、引数に価格COM の商品レビューのURLを渡すと、レビュー内容を収集してくれるようになっています。
URLの例:https://review.kakaku.com/review/J0000037949/#tab’
関数内部では、こちらの記事で紹介した自作クラス(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で文書要約(テキストマイニング)しよう!
今回の記事が皆様のプログラミングの一助になれば幸いです。