---
title: "Scraper Twitter (X) en Python : tweets, abonnés et export CSV"
description: "Tutoriel Python : récupérez les tweets et abonnés publics de X (Twitter) avec l'API REST de TwexAPI, parcourez les pages et enregistrez-les en CSV. Sans navigateur, proxy ni compte X."
---

Ce guide récupère des données publiques de X (Twitter) depuis Python avec de simples requêtes HTTP. Vous recherchez des tweets avec les opérateurs de recherche avancée, parcourez les pages de résultats, exportez une liste d'abonnés et enregistrez le tout en CSV. Pas besoin de navigateur headless, de proxy ni de compte X : une clé d'API TwexAPI suffit.

## Avant de commencer

1. Créez un compte sur [twexapi.io](https://twexapi.io/get-started) pour recevoir 20 000 Credits offerts, soit environ 4 000 lectures.
2. Copiez votre clé d'API depuis le tableau de bord et exportez-la :

```bash
export TWEXAPI_KEY="twexapi_xxx"
pip install requests
```

## Rechercher des tweets

L'[endpoint de recherche avancée](/fr/api-reference/search-endpoints/get-data-page-twitter-advanced-search-page-post) prend une liste de `searchTerms`, un `sortBy` à `Latest` ou `Top`, et un `next_cursor` pour la pagination. Chaque page renvoie jusqu'à 20 tweets.

```python
import os
import time

import requests

API = "https://api.twexapi.io"
HEADERS = {"Authorization": f"Bearer {os.environ['TWEXAPI_KEY']}"}


def paginate(path, body, max_items):
    """POST a cursor endpoint until max_items rows or the last page."""
    items, cursor = [], ""
    while len(items) < max_items:
        res = requests.post(f"{API}{path}", headers=HEADERS, json={**body, "next_cursor": cursor}, timeout=30)
        res.raise_for_status()
        page = res.json()
        items += [row for row in page.get("data", []) if row]
        cursor = page.get("next_cursor")
        if not page.get("has_next_page") or not cursor:
            break
        time.sleep(5)  # free Starter plan: 1 request per 5 seconds; paid plans allow 5+ per second
    return items[:max_items]


tweets = paginate(
    "/twitter/advanced_search/page",
    {"searchTerms": ["openai", "lang:en", "min_faves:100", "since:2026-10-01"], "sortBy": "Latest"},
    max_items=200,
)
print(len(tweets), "tweets")
```

`searchTerms` accepte les mêmes opérateurs que la barre de recherche de X :

| Opérateur | Exemple | Signification |
| :--- | :--- | :--- |
| `from:` | `from:nasa` | Publications d'un compte |
| `since:` / `until:` | `since:2026-10-01` | Période |
| `lang:` | `lang:fr` | Langue |
| `min_faves:` | `min_faves:100` | Nombre minimal de j'aime |
| `-filter:replies` | | Exclure les réponses |

## Enregistrer les tweets en CSV

```python
import csv

with open("tweets.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)
    writer.writerow(["tweet_id", "created_at", "user", "likes", "retweets", "text"])
    for t in tweets:
        writer.writerow([
            t.get("tweet_id"),
            t.get("created_at"),
            (t.get("user") or {}).get("screen_name"),
            t.get("favorite_count"),
            t.get("retweet_count"),
            (t.get("text") or "").replace("\n", " "),
        ])
```

Avec `utf-8-sig`, les accents et les emojis s'affichent correctement dans Excel.

## Récupérer les abonnés

L'[endpoint des abonnés](/fr/api-reference/followers-following-endpoints/get-followers-cursor-apiendpoint-twitter-followers-page-post) utilise la même pagination par curseur : la fonction `paginate` fonctionne telle quelle.

```python
followers = paginate("/twitter/followers/page", {"screen_name": "nasa"}, max_items=1000)

with open("followers.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)
    writer.writerow(["username", "name", "followers", "location", "bio"])
    for u in followers:
        writer.writerow([u.get("username"), u.get("name"), u.get("followersCount"), u.get("location"), u.get("description")])
```

## Coût

Une lecture courante coûte 5 Credits, soit environ 0,05 $ pour 1 000 tweets ou abonnés. Les 200 tweets et 1 000 abonnés de l'exemple coûtent environ 0,06 $ au total. Voir les [tarifs](/fr/guides/pricing) pour le détail.

## Pourquoi pas Selenium, Playwright ou twscrape ?

Depuis que X a fermé l'accès invité début 2024, les scrapers basés sur un navigateur et les outils open source ont besoin de comptes X connectés et de proxys rotatifs, et ils cassent à chaque changement du site. Une API vous retire cette maintenance. Pour une comparaison plus complète, voir [Scraper Twitter auto-hébergé vs TwexAPI](/fr/comparison/scraper-vs-api).

## Étapes suivantes

- [Présentation de l'API de scraping Twitter](https://twexapi.io/twitter-scraper) : les données disponibles et la comparaison avec Apify et l'API officielle.
- [Gestion des erreurs](/fr/guides/error-handling) : relancer et temporiser après une réponse `429` ou `5xx`.
- Ne collectez que des données publiques et respectez le droit de la vie privée et les conditions de X.
