我的程序不会将抓取信息保存到 Excel、CSV 或 JSON 中(不断收到相同的错误消息)

问题描述 投票:0回答:1

我编写了一个程序,使用 Google Maps API 从中抓取数据(姓名、地址、电话号码)。当我运行代码时,它会抓取所需的所有信息(我将其打印在控制台上),但是当我选择所需的格式(Excel、CSV 或 JSON)时,我收到以下错误消息:

ValueError:没有文件类型的引擎:“json”(或 excel 或 csv)。

这部分代码位于第64行:

pd.DataFrame(data).to_excel(filename, index=False)

我还安装了所有必需的软件包。这是完整的代码:

import os
import requests
import pandas as pd
import json
from concurrent.futures import ThreadPoolExecutor

def get_place_ids(api_key, query):
    base_url = "https://maps.googleapis.com/maps/api/place/textsearch/json"
    params = {
        "query": query,
        "key": api_key,
    }

    response = requests.get(base_url, params=params)
    results = response.json().get("results", [])

    place_ids = [result["place_id"] for result in results]
    return place_ids

def get_place_details(api_key, place_id):
    base_url = "https://maps.googleapis.com/maps/api/place/details/json"
    params = {
        "place_id": place_id,
        "fields": "name,formatted_address,formatted_phone_number",
        "key": api_key,
    }

    response = requests.get(base_url, params=params)
    place_details = response.json().get("result", {})

    return place_details

def fetch_details_async(api_key, place_ids):
    data = []

    with ThreadPoolExecutor() as executor:
        futures = [executor.submit(get_place_details, api_key, place_id) for place_id in place_ids]

        for future in futures:
            place_details = future.result()
            name = place_details.get("name", "N/A")
            address = place_details.get("formatted_address", "N/A")
            phone_number = place_details.get("formatted_phone_number", "N/A")

            data.append({
                "Name": name,
                "Address": address,
                "Phone Number": phone_number
            })

    for info in data:
        print(info)
        
    return data

def save_to_existing_file(data, output_format):
    filename = f"output.{output_format}"

    if os.path.exists(filename):
        existing_data = getattr(pd, f"read_{output_format}")(filename)
        combined_data = pd.concat([existing_data, pd.DataFrame(data)], ignore_index=True)
        getattr(combined_data, f"to_{output_format}")(filename, index=False)
    else:
        pd.DataFrame(data).to_excel(filename, index=False)


def main():
    query = input("Enter the query you want to search: ")
    api_key = "GOOGLE MAPS API KEY"

    place_ids = get_place_ids(api_key, query)

    if place_ids:
        data = fetch_details_async(api_key, place_ids)

        output_format = input("Choose the output format (Excel, CSV, JSON): ").lower()

        save_to_existing_file(data, output_format)

    else:
        print("No data to export.")

if __name__ == "__main__":
    main()
python api google-maps
1个回答
0
投票

pd.DataFrame(data).to_excel 函数仅适用于 excel(.xlsx) 文件,不支持 JSON 作为输出格式。 对于 json 输出:

pd.DataFrame(data).to_json(filename, orient='records', lines=True)

对于 excel(.xlsx) 输出:

pd.DataFrame(data).to_excel(filename, index=False)

也许这对您也有用: https://www.geeksforgeeks.org/convert-json-to-csv-in-python/

© www.soinside.com 2019 - 2024. All rights reserved.