LoginSignup
ken100
@ken100

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ModuleNotFoundError: No module named 'duckduckgo_search' のエラー

解決したいこと

会社名と会社の住所のリストからスクレイピングで
会社のウェブサイトのURLとそのウェブサイトの中の問い合わせフォームのURLを抽出して
CSVファイルに書き出すというコードを作りました。

発生している問題・エラー

Traceback (most recent call last): File
"/Users/user/Dropbox/python.py/open/240417/240417.py", line 6, in

from duckduckgo_search import DDGS ModuleNotFoundError: No module named 'duckduckgo_search'

というエラーが出てしまいます。

自分で試したこと

pip install duckduckgo_search

を実行しても同じように上記のエラーが出てしまいます。

何が原因かわかる方いますでしょうか。

以下は実行したコード全文になります。

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# duckduckgo_searchモジュールをインポートするためには、以下のようにインポート文を追加します
from duckduckgo_search import DDGS

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秒の待機時間を設ける

df_result = pd.DataFrame(results)
df_result.to_json("result.json", force_ascii=False)  # 結果をJSON形式で保存
0

1Answer

ページヘッダはハイフンですが、本文ではアンダースコアになってますね…
ハイフンでpipしてみたらどうでしょう?

0

Your answer might help someone💌