我编写了一个程序,使用 Google 地图 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()
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)