こんにちは!今回は、スキルマーケットの「ココナラ」に掲載されているサービスを、Pythonのスクレイピング技術を使って自動的に抽出し、分析する方法についてご紹介します。
副業を検討している方や、ココナラで人気のあるテーマを知りたい方にとって、どのようなサービスが提供されているのか、どのような価格帯で取引されているのかを知ることは非常に有益です。そこで、今回は「データ分析」をキーワードに、ココナラのサービスをスクレイピングし、サービス名、評価、価格といった情報を取得していきます。
スクレイピングは、公開されているWebページのデータを自動で収集する技術です。この記事では、PythonのSeleniumとBeautifulSoupを使用して、ココナラのサービス情報を効率的に取得する手順を解説します。また、Webページの要素を探すための「セレクタ」の調べ方や、Seleniumを使ったChromeDriverの自動設定についても説明します。
スクレイピングの基本はこちらの記事を参考にしてください
プログラミング完全ガイド:基礎からスクレイピング&API活用までのまとめ
ココナラって何?
ココナラ
ココナラは、個人が持っているスキルや知識をサービスとして提供できるオンラインマーケットプレイスです。利用者は、自分が得意とする分野(例えば、デザイン、翻訳、プログラミング、相談、占いなど)で他の人にサービスを提供し、その対価として報酬を受け取ります。また、スキルを探している人は、自分に合ったサービスを選んで依頼することができます。
ココナラは、専門的なスキルや副業を始めたい人、個人的なサポートが必要な人たちが集まるプラットフォームとして人気があり、サービス提供者が個人としてビジネスを始める場としても広く利用されています。
【初心者~プロまで幅広い人が集まる】
日本最大級のスキルマーケット
使用する技術とライブラリ
今回使用する技術は以下の通りです。
- Python
- Selenium - Webブラウザを自動操作するためのライブラリ
- BeautifulSoup - HTMLを解析してデータを抽出するためのライブラリ
- webdriver-manager - ChromeDriverの自動管理
必要なライブラリをインストールするために、以下のコマンドを実行してください。
1 |
pip install selenium beautifulsoup4 webdriver-manager |
ポイント: SeleniumのChromeDriver自動設定
Seleniumを使用する際、通常はChromeDriverのバージョンをダウンロードして手動で設定する必要がありますが、webdriver-manager
を使用すると、ChromeDriverを自動的にダウンロードして設定してくれるため、環境設定が非常に簡単です。この方法を使えば、手動でChromeDriverのパスを指定する手間が省け、常に最新のバージョンで動作させることができます。
セレクタの調べ方
スクレイピングの際に、ページ内の要素(例えば検索ボックスやサービス名)を指定するために「セレクタ」を使用します。以下は、Chromeブラウザで要素のセレクタを調べる手順です。
- 対象のWebページを開く
まず、スクレイピング対象となるWebページをChromeで開きます。今回はココナラのトップページを例にします。 - 検証ツールを開く
調べたい要素を右クリックし、メニューから「検証」を選びます。これにより、ページのHTML構造を表示する「開発者ツール」が表示されます。ショートカットキー(Windows:F12
、Mac:Cmd + Opt + I
)でも開くことができます。 - 要素を選択する
「検証」モードで、マウスを使ってスクレイピングしたい要素(例: 検索ボックス、サービスタイトル)をクリックします。すると、その要素のHTMLタグが開発者ツールにハイライトされます。 - セレクタをコピーする
ハイライトされたHTMLタグを右クリックし、メニューから「コピー」→「CSSセレクタ」を選択します。これで、その要素のCSSセレクタがコピーされました。
具体例
例えば、ココナラの検索ボックスのセレクタは以下のように表示されます。
1 |
<input type="search" autocomplete="off" placeholder="キーワードで検索" class="input"> |
この場合、input.input
がCSSセレクタとなります。このセレクタを使ってSeleniumで検索ボックスにアクセスすることができます。
スクレイピング手順
1. ChromeDriverの設定
まず、Seleniumを使用してブラウザを操作するために、ChromeDriverを自動的に設定します。
1 2 3 4 5 6 7 8 9 10 11 12 |
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup import time import csv # ChromeDriverを自動的にダウンロード・管理 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) |
ChromeDriverManager().install()
を使うことで、手動でChromeDriverを設定する手間を省き、常に最新のChromeDriverがインストールされます。
2. ココナラのページにアクセスして検索
次に、ココナラのトップページにアクセスし、「データ分析」というキーワードでサービスを検索します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# ココナラのページを開く driver.get("https://www.coconala.com/") # ページが完全に読み込まれるまで待機 wait = WebDriverWait(driver, 10) # 検索ボックスを見つけてキーワードを入力 search_box = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input.input'))) search_box.send_keys('データ分析') # 検索ボタンをクリック search_button = driver.find_element(By.CSS_SELECTOR, 'button.button.d-searchInput_searchButton') search_button.click() # ページが読み込まれるまで待機 time.sleep(5) |
3. サービス情報をスクレイピング
次に、検索結果に表示されているサービスの情報(タイトル、評価、価格)を取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# 全ページ分スクレイピングするためのループ service_data = [] page_number = 1 while True: # ページのHTMLを取得してパース html = driver.page_source soup = BeautifulSoup(html, 'html.parser') # サービス内容(タイトル、評価、価格)を抽出 titles = soup.find_all('h3', class_='c-serviceBlockItemContent_name') ratings = soup.find_all('span', class_='c-serviceBlockItemContentPriceRating_score') prices = soup.find_all('strong') print(f"ページ {page_number} のデータをスクレイピング中...") # データをリストに追加 for title, rating, price in zip(titles, ratings, prices): try: service_title = title.get_text(strip=True) service_rating = rating.get_text(strip=True) service_price = price.get_text(strip=True) + "円" service_data.append([service_title, service_rating, service_price]) except Exception as e: print(f"データ抽出時にエラーが発生しました: {e}") # 次のページがあるかどうかを確認 try: next_button = driver.find_element(By.CSS_SELECTOR, 'a.pagination-next') next_button.click() page_number += 1 time.sleep(5) # 次のページが読み込まれるまで待機 except Exception as e: print("次のページが見つからないため、スクレイピングを終了します。") break |
4. データをCSVファイルに保存
取得したサービス情報をCSVファイルに保存し、後でデータ分析に利用できるようにします。
エラー処理と対策
スクレイピングを行う際には、以下のようなエラーが発生することがあります。
- 要素が見つからない: ページの構造が変更された場合、要素のクラス名やCSSセレクタが変更されることがあります。
find_element
やfind_all
のセレクタを再確認し、適切なセレクタを設定する必要があります。 - ページ遷移エラー: ページ遷移中にエラーが発生することもあります。この場合、次ページがない場合には適切に処理を終了する必要があります。
まとめ
この記事では、Pythonを使ってココナラのサービス情報をスクレイピングし、タイトル、評価、価格といったデータを自動的に取得する方法をご紹介しました。また、要素のセレクタをChromeの「検証」ツールを使って調べる方法や、SeleniumのChromeDriver自動設定の利便性も説明しました。
副業やスキルマーケットでどのようなテーマが人気なのか、どのような価格帯で取引されているのかを知るために、ぜひこの方法を試してみてください。ただし、スクレイピングは対象のWebサイトの利用規約に従って実施することが重要です。
Pythonを学びたい方はこちらの記事を参考にしてみてください
関連記事
プログラミング学習を進めているけれど、まだ副収入につなげられていない…そんなあなたへ!今こそ、学んだスキルを活かして副業に挑戦する絶好のチャンスです。プログラミングだけでなく、自分のスキルや商品をネットで販売する『ネットショップ』を開設してみませんか?
ネットショップを持つことで、自分の知識やスキルをより多くの人に届け、副収入を得ることが可能です。学んできたプログラミングを活かして、ショップのカスタマイズや運営も自由自在に行えますし、もし商品作成が難しい場合でも、デジタル商品やサービス提供など、いろんな選択肢があります。
このステップで一歩踏み出せば、今学んでいることが副収入に直結し、自分の時間をより有効に使うことができるはずです!一緒にネットショップを開設し、副業の第一歩を踏み出しましょう!
タイトルテキスト
プログラミングを学びたいけど、どこから始めたらいいのか分からない、自分に合っているか不安…そんな悩みを持っている方におすすめしたいのが、 無料相談 サービスです!
この無料相談では、あなたの現状や目標に合わせて、最適な学習プランを一緒に考えてくれます。どんなスキルが必要なのか、どうやって学習を進めると効果的かを具体的にアドバイスしてもらえるので、無駄なく効率的にスタートを切ることができます。
さらに、プログラミング学習には同じ目標を持つ 仲間 がいること、そして頼りになる メンター の存在がとても大きな支えになります。独学ではどうしてもつまずきやすい部分も、メンターがあなたの成長に合わせて親身にサポートしてくれるので、安心して学びを進められます。
まずは 無料相談 で、あなたに合ったプランを見つけて、スキルアップへの第一歩を踏み出してみませんか?今なら、迷っている方でも気軽に相談できるチャンスです!