Vous n'avez pas besoin d'être développeur pour extraire des données d'entreprises locales à partir des résultats de recherche. Avec curl et une clé API Scavio, vous pouvez récupérer les noms, les évaluations, les adresses et les numéros de téléphone des entreprises pour n'importe quel emplacement. Dirigez la sortie vers un fichier JSON, ouvrez-le dans un tableur, et vous obtenez une base de données d'entreprises locales. Chaque recherche coûte 0.005 $. Ce tutoriel vous guide tout au long du processus en utilisant uniquement des commandes terminal et des outils gratuits.
Prérequis
- Un terminal avec curl installé (intégré sur macOS/Linux, Windows via Git Bash)
- Une clé API Scavio depuis scavio.dev
- Un tableur (Google Sheets, Excel ou LibreOffice)
- jq installé pour le traitement JSON (facultatif mais recommandé)
Parcours
Étape 1: Effectuez votre première recherche d'entreprise locale
Utilisez curl pour envoyer une requête de recherche à l'API Scavio. La réponse inclut les résultats du pack local avec les noms des entreprises, les évaluations et les adresses.
# Set your API key
export SCAVIO_API_KEY="your_key_here"
# Search for local businesses
curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "best pizza in Chicago", "country_code": "us", "num_results": 10}' \
| python3 -m json.tool
# With jq for cleaner output
curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "best pizza in Chicago", "country_code": "us", "num_results": 10}' \
| jq '.local_results[] | {name: .title, rating: .rating, address: .address}'Étape 2: Extrayez les données d'entreprise dans un fichier JSON
Enregistrez les résultats de recherche dans des fichiers pour chaque catégorie d'entreprise. Effectuez plusieurs recherches pour constituer une base de données complète.
# Search multiple categories and save results
for category in "restaurants" "dentists" "plumbers" "hair salons"; do
echo "Searching: $category in Chicago"
curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"query\": \"$category in Chicago IL\", \"country_code\": \"us\", \"num_results\": 10}" \
> "${category}_chicago.json"
sleep 1 # Rate limiting
done
# Verify the files
for f in *_chicago.json; do
count=$(jq '.local_results | length' "$f" 2>/dev/null || echo 0)
echo "$f: $count local results"
doneÉtape 3: Convertissez JSON en CSV avec jq
Transformez les résultats JSON au format CSV que tout tableur peut importer. Extrayez les champs dont vous avez besoin : nom, évaluation, avis, adresse, téléphone.
# Convert a single file to CSV
echo "name,rating,reviews,address,phone" > chicago_businesses.csv
for f in *_chicago.json; do
category=$(echo "$f" | sed 's/_chicago.json//')
jq -r --arg cat "$category" \
'.local_results[]? | [.title // "", .rating // "", .reviews // "", .address // "", .phone // "", $cat] | @csv' \
"$f" >> chicago_businesses.csv 2>/dev/null
done
# Preview the CSV
head -10 chicago_businesses.csv
echo ""
wc -l chicago_businesses.csv | awk '{print $1 - 1, "businesses extracted"}'Étape 4: Créez un script bash simple pour une extraction reproductible
Enveloppez l'ensemble du processus dans un script réutilisable. Passez une ville en paramètre et obtenez un CSV des entreprises locales.
#!/bin/bash
# local_business_extract.sh - Extract local businesses for any city
# Usage: ./local_business_extract.sh "Austin TX"
CITY="${1:-Austin TX}"
SAFE_CITY=$(echo "$CITY" | tr ' ' '_' | tr '[:upper:]' '[:lower:]')
OUTPUT="${SAFE_CITY}_businesses.csv"
CATEGORIES=("restaurants" "dentists" "plumbers" "electricians" "hair salons")
echo "Extracting businesses in $CITY"
echo "name,category,rating,reviews,address" > "$OUTPUT"
for cat in "${CATEGORIES[@]}"; do
echo " Searching: $cat"
RESULT=$(curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"query\": \"$cat in $CITY\", \"country_code\": \"us\", \"num_results\": 10}")
echo "$RESULT" | jq -r --arg cat "$cat" \
'.local_results[]? | [.title // "", $cat, .rating // "", .reviews // "", .address // ""] | @csv' \
>> "$OUTPUT" 2>/dev/null
sleep 1
done
TOTAL=$(tail -n +2 "$OUTPUT" | wc -l | tr -d ' ')
COST=$(echo "${#CATEGORIES[@]} * 0.005" | bc)
echo "Done: $TOTAL businesses saved to $OUTPUT"
echo "Cost: \$$COST (${#CATEGORIES[@]} searches at \$0.005 each)"Exemple Python
import os, requests, csv
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
def extract_businesses(city, categories):
all_biz = []
for cat in categories:
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'query': f'{cat} in {city}', 'country_code': 'us', 'num_results': 10})
for r in resp.json().get('local_results', []):
all_biz.append({'name': r.get('title',''), 'category': cat,
'rating': r.get('rating',''), 'address': r.get('address','')})
with open(f'{city.replace(" ","_").lower()}.csv', 'w', newline='') as f:
w = csv.DictWriter(f, fieldnames=['name','category','rating','address'])
w.writeheader()
w.writerows(all_biz)
print(f'Exported {len(all_biz)} businesses')
extract_businesses('Austin TX', ['restaurants', 'dentists'])Exemple JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function extractBusinesses(city, categories) {
const all = [];
for (const cat of categories) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `${cat} in ${city}`, country_code: 'us', num_results: 10 })
});
const local = (await resp.json()).local_results || [];
local.forEach(r => all.push({ name: r.title, category: cat, rating: r.rating, address: r.address }));
}
console.log(`Found ${all.length} businesses in ${city}`);
all.forEach(b => console.log(` ${b.name} (${b.rating}) - ${b.category}`));
}
extractBusinesses('Austin TX', ['restaurants', 'dentists']);Sortie attendue
Extracting businesses in Austin TX
Searching: restaurants
Searching: dentists
Searching: plumbers
Searching: electricians
Searching: hair salons
Done: 32 businesses saved to austin_tx_businesses.csv
Cost: $0.025 (5 searches at $0.005 each)
name,category,rating,reviews,address
"Franklin Barbecue",restaurants,4.8,4521,"900 E 11th St, Austin, TX"
"Uchi Austin",restaurants,4.7,2103,"801 S Lamar Blvd, Austin, TX"