会社名と会社の住所のリストからスクレイピングで会社のウェブサイトのURLとそのウェブサイトの中の問い合わせフォームのURLを抽出してCSVファイルに書き出すというコードを作りました。
検索にはDuckduckgoを使っています。特にこだわりはないので他の検索でいいものがあれば教えてください。
しかし、会社名を検索してもNoneの値がCSVに入っているだけで
会社のウェブサイトのURLの取得すらできていません。
何か間違っている部分はありますでしょうか。
venvの仮想環境で実行しています。
以下は現在実行しているコードになります。
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# duckduckgo_searchモジュールをインポートするためには、以下のようにインポート文を追加します
from duckduckgo_search import DDGS
import sys
print(sys.path)
print(sys.executable)
def get_company_url(company_name):
try:
with DDGS() as ddgs:
results = ddgs.text(
keywords=company_name,
region='jp-jp',
safesearch='moderate',
time='y',
max_results=5,
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
)
for result in results:
if company_name in result:
return result
return None
except Exception as e:
print(f"Error occurred while searching for {company_name}")
return None
def get_contact_url(company_url):
try:
response = requests.get(company_url)
soup = BeautifulSoup(response.text, "html.parser")
contact_link = soup.find("a", string=["お問い合わせ", "お問い合わせフォーム", "Contact", "contact form"])
if contact_link:
contact_url = contact_link.get("href")
if not contact_url.startswith("http"):
contact_url = company_url + contact_url
return contact_url
else:
return None
except Exception as e:
print(f"Error occurred while scraping {company_url}")
return None
df = pd.read_csv("company_list.csv")
results = []
for index, row in df.iterrows():
company_name = row["会社名"]
company_url = get_company_url(company_name)
print(f"Company URL: {company_url}")
if company_url:
contact_url = get_contact_url(company_url)
print(f"Contact URL: {contact_url}")
else:
contact_url = None
result = {
"会社名": company_name,
"住所": row["住所"],
"WebサイトURL": company_url,
"問い合わせフォームURL": contact_url
}
results.append(result)
time.sleep(3) # 各会社の処理の間に3秒の待機時間を設ける
# 結果をCSVファイルに出力
df_result = pd.DataFrame(results)
df_result.to_csv("result.csv", index=False)