エクセルの複数の企業名リストに会社概要を加える
とある会社さんから相談があった
複数の企業名リストがあり、その企業の概要をまとめたいとの相談があった
クローリングは禁止している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でできることをとにかくすぐやる!