見出し画像

エクセルの複数の企業名リストに会社概要を加える

とある会社さんから相談があった

複数の企業名リストがあり、その企業の概要をまとめたいとの相談があった

クローリングは禁止しているWEBサイトもあるので規約を確認しながら慎重に実施するべきだが

6件のリストでまずはすぐにやってみようと思いたち実行

ドラッグストアのマツモトキヨシのマツモトキヨシ会長が市長時代に千葉県松戸市で「すぐやる課」というのをつくって、いまも迅速に課題解決をしているという素晴らしい話がいつまでも頭に残っている

Google colabで実行

サンプルとしてランダムな企業名を選びエクセルに追加した

早速やってみましょう


Google colabでGoogle driveにおいたファイルを操作

from google.colab import drive
drive.mount('/content/drive')


企業のリスト

必要なライブラリのインポート

import openpyxl
import requests
from bs4 import BeautifulSoup
from googlesearch import search
  • openpyxl:Excelファイル(.xlsx形式)を読み書きするためのライブラリ

  • requests:ウェブページに対してHTTPリクエストを送信し、HTMLを取得するためのライブラリ

  • BeautifulSoup:HTMLのパース(解析)とデータ抽出を行うためのライブラリ

  • googlesearch:Google検索を行うためのモジュール


Excelファイルの読み込み

# Excelファイルのパス
file_path = '/content/drive/MyDrive/Project_folder/test_companies.xlsx'

# Excelファイルを読み込み
test_companies_wb = openpyxl.load_workbook(file_path)
sheet = test_companies_wb.active
  • file_path:Excelファイルの保存場所のパスを指定

  • openpyxl.load_workbook(file_path):Excelファイルを読み込む

  • sheet = test_companies_wb.active:読み込んだExcelファイルの最初のシートを選択

URLを取得する関数

def get_company_url(company_name):
    try:
        # Google検索を使用してURLを取得
        for url in search(company_name, num=1, stop=1, pause=2):
            return url
    except Exception as e:
        return "URL not found"
  • get_company_url(company_name):会社名を入力として受け取り、その会社に関連するウェブサイトのURLをGoogle検索を通して取得

  • search(company_name, num=1, stop=1, pause=2):Googleで会社名を検索し、最初の検索結果を取得

    • num=1:取得する結果の数

    • stop=1:検索を停止するポイント

    • pause=2:リクエスト間の待機時間(Googleの制限に配慮するためのもの)。

  • return "URL not found":エラーが発生した場合は「URL not found」を返す

会社概要を取得する関数

def get_company_overview(url):
    try:
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, 'html.parser')

        # 会社概要と思われる要素を取得(複数のタグを試す)
        overview = soup.find('meta', attrs={'name': 'description'})
        if overview and 'content' in overview.attrs:
            return overview['content']

        overview = soup.find('p')
        if overview:
            return overview.get_text(strip=True)

        overview = soup.find('div', class_='about')
        if overview:
            return overview.get_text(strip=True)

        overview = soup.find('section')
        if overview:
            return overview.get_text(strip=True)

        return "Overview not found"
    except Exception as e:
        return "Overview not found"
  • get_company_overview(url):ウェブサイトのURLを入力として受け取り、そのページの会社概要を取得

  • headers:リクエストヘッダーを設定しています。ここでは、ユーザーエージェントを設定して、リクエストがブラウザからのものであるかのように見せかける

  • response = requests.get(url, headers=headers):指定したURLに対してGETリクエストを送信し、ウェブページのHTMLを取得

  • soup = BeautifulSoup(response.text, 'html.parser'):取得したHTMLをパース

  • overview = soup.find('meta', attrs={'name': 'description'}):ページの<meta>タグのdescription属性を探して、その内容を取得

  • その後、他にも概要が含まれている可能性のあるタグ(<p>、<div>、<section>など)を順に探して、概要を抽出。ここが重要!!

  • 概要が見つからない場合は "Overview not found" を返す。


Excelシートの更新

for row in range(2, sheet.max_row + 1):  # 1行目はヘッダーと仮定
    company_name = sheet[f'A{row}'].value
    if company_name:
        company_url = get_company_url(company_name)
        sheet[f'B{row}'] = company_url
        if company_url != "URL not found":
            company_overview = get_company_overview(company_url)
            sheet[f'C{row}'] = company_overview
  • for row in range(2, sheet.max_row + 1):2行目から最終行までを繰り返す(1行目はヘッダーと仮定しています)。

  • company_name = sheet[f'A{row}'].value:A列の会社名を取得。

  • company_url = get_company_url(company_name):会社名からURLを取得。

  • sheet[f'B{row}'] = company_url:取得したURLをB列に記載。

  • if company_url != "URL not found":URLが見つかった場合のみ、次のステップに進む。

  • company_overview = get_company_overview(company_url):会社の概要を取得。

  • sheet[f'C{row}'] = company_overview:取得した会社概要をC列に記載。

更新したExcelファイルの保存

# 更新したExcelファイルを保存
test_companies_wb.save(file_path)

test_companies_wb.close()
  • test_companies_wb.save(file_path):変更内容をExcelファイルに保存。

  • test_companies_wb.close():ファイルを閉じる。

会社概要を取得できました

会社概要を取得できました

クローリングの注意事項

クローリングは規約を確認して慎重に実施しましょう!


まとめ

すぐやることの重要性

とにかくすぐやるということが大事かな
自分の中の「すぐやる課
これはマインドセットの問題で自分の中の慣性を打ち破りすぐやってみる

これからはAIで学習の仕方が大きく変わると感じる
まずやりたいことを迅速にアウトプット
そこから各ステップに分解
プロセス毎にそれを深く理解して応用していく
このやり方で学習してからアウトプットする時間が
劇的にスピードアップし応用できるまでの時間もアップした。

従来のやり方は基本から学び応用する。
今後は応用してみてから「なぜ」という疑問を動機に基礎に戻る。

ということでpythonでできることをとにかくすぐやる!


いいなと思ったら応援しよう!