Skip to main content

Powerful Twitter/X scraping tool dengan Selenium

Project description

🐦 Panen Tweet - Twitter/X Scraper

PyPI version Python 3.7+ License: MIT

Panen Tweet adalah tool powerful untuk scraping Twitter/X menggunakan Selenium. Dengan tool ini, Anda dapat mengekstrak tweet berdasarkan kata kunci, rentang tanggal, bahasa, dan jenis tweet (teratas/terbaru) dengan mudah.

📦 Instalasi

Instalasi dari PyPI (Recommended)

pip install panen-tweet

Instalasi dari Source

git clone https://github.com/Dhaniaaa/panen-tweet.git
cd panen-tweet
pip install -e .

🔑 Mendapatkan Auth Token

Sebelum menggunakan, Anda perlu mendapatkan auth_token dari akun Twitter/X Anda:

Langkah-langkah:

  1. Login ke x.com menggunakan browser Anda
  2. Tekan F12 untuk membuka Developer Tools
  3. Buka tab Application (Chrome) atau Storage (Firefox)
  4. Di sidebar kiri, expand Cookies → klik https://x.com
  5. Cari cookie dengan nama auth_token
  6. Klik pada cookie tersebut dan salin nilai (value) nya
  7. Nilai ini yang akan Anda gunakan

⚠️ PENTING - Keamanan Token:

  • JANGAN bagikan auth_token Anda kepada siapapun
  • JANGAN commit auth_token ke Git/GitHub
  • Token ini memberikan akses penuh ke akun Twitter/X Anda
  • Jika token ter-expose, segera ganti password Twitter/X Anda

🚀 Cara Penggunaan

Opsi 1: Command Line Interface (Termudah)

Setelah instalasi, jalankan command berikut di terminal:

panen-tweet

Program akan meminta Anda untuk:

  1. Memasukkan auth_token
  2. Kata kunci yang ingin dicari
  3. Jumlah tweet maksimal per sesi
  4. Tanggal mulai (format: YYYY-MM-DD)
  5. Tanggal selesai (format: YYYY-MM-DD)
  6. Interval hari per sesi scraping
  7. Kode bahasa (contoh: id untuk Indonesia, en untuk English)
  8. Jenis tweet (1 untuk Top, 2 untuk Terbaru/Latest)

Contoh interaksi:

TWITTER/X SCRAPER - PANEN TWEET
...
Masukkan auth_token Anda: <paste_token_anda_disini>

1. Masukkan kata kunci/topik pencarian: python programming
2. Berapa jumlah MAKSIMAL tweet yang ingin diambil PER SESI? 100
3. Masukkan TANGGAL MULAI KESELURUHAN (YYYY-MM-DD): 2024-01-01
4. Masukkan TANGGAL SELESAI KESELURUHAN (YYYY-MM-DD): 2024-01-07
5. Berapa hari interval per sesi scraping? (misal: 1 untuk per hari): 1
6. Masukkan kode bahasa (misal: 'id' untuk Indonesia, 'en' untuk Inggris): en
7. Pilih jenis tweet (1 untuk Top, 2 untuk Terbaru): 2

Program akan otomatis:

  • Scraping tweet sesuai parameter
  • Menyimpan hasil ke file CSV
  • Menghapus duplikat otomatis

Output: File CSV dengan nama seperti tweets_pythonprogramming_latest_20240101-20240107.csv

Opsi 2: Menggunakan sebagai Library Python

Jika Anda ingin mengintegrasikan ke dalam kode Python Anda:

from panen_tweet import TwitterScraper
import datetime
import os

# Setup auth token (gunakan environment variable untuk keamanan)
# Windows: $env:TWITTER_AUTH_TOKEN = "your_token_here"
# Linux/Mac: export TWITTER_AUTH_TOKEN="your_token_here"
auth_token = os.getenv('TWITTER_AUTH_TOKEN', 'your_auth_token_here')

# Inisialisasi scraper
scraper = TwitterScraper(
    auth_token=auth_token,
    scroll_pause_time=5,  # Waktu jeda antar scroll (detik)
    headless=True         # Set False untuk melihat browser
)

# Scraping dengan rentang tanggal
df = scraper.scrape_with_date_range(
    keyword="python programming",
    target_per_session=100,      # 100 tweets per sesi
    start_date=datetime.datetime(2024, 1, 1),
    end_date=datetime.datetime(2024, 1, 7),
    interval_days=1,             # Scraping per hari
    lang='en',                   # Bahasa English
    search_type='latest'         # 'top' atau 'latest'
)

# Simpan hasil ke CSV
if df is not None:
    scraper.save_to_csv(df, "hasil_scraping.csv")
    print(f"✅ Berhasil mengambil {len(df)} tweets!")
    print(df.head())
else:
    print("❌ Tidak ada data yang berhasil diambil")

Opsi 3: Menggunakan Environment Variable (Recommended untuk Security)

Windows PowerShell:

# Set environment variable
$env:TWITTER_AUTH_TOKEN = "your_auth_token_here"

# Jalankan program
panen-tweet

Windows CMD:

set TWITTER_AUTH_TOKEN=your_auth_token_here
panen-tweet

Linux/Mac:

export TWITTER_AUTH_TOKEN="your_auth_token_here"
panen-tweet

Atau buat file .env:

# Install python-dotenv
pip install python-dotenv

# Buat file .env
echo "TWITTER_AUTH_TOKEN=your_token_here" > .env

# Di kode Python Anda:
from dotenv import load_dotenv
load_dotenv()

📊 Format Output

Data yang dihasilkan dalam format CSV dengan kolom-kolom berikut:

Kolom Deskripsi
username Nama user yang memposting tweet
handle Handle Twitter (@username)
timestamp Waktu tweet diposting (format ISO)
tweet_text Isi konten tweet
url URL lengkap ke tweet
reply_count Jumlah replies
retweet_count Jumlah retweets
like_count Jumlah likes

Contoh output CSV:

username,handle,timestamp,tweet_text,url,reply_count,retweet_count,like_count
John Doe,@johndoe,2024-01-01T10:30:00.000Z,Python is awesome!,https://x.com/johndoe/status/...,5,10,25
...

⚙️ Parameter & Konfigurasi

TwitterScraper Parameters

TwitterScraper(
    auth_token=None,        # Cookie auth_token (WAJIB)
    scroll_pause_time=5,    # Waktu jeda antar scroll dalam detik
    headless=True          # True = tanpa GUI, False = tampilkan browser
)

scrape_with_date_range Parameters

scraper.scrape_with_date_range(
    keyword="",             # Kata kunci pencarian (WAJIB)
    target_per_session=100, # Jumlah target tweet per sesi
    start_date=datetime,    # Tanggal mulai (WAJIB)
    end_date=datetime,      # Tanggal selesai (WAJIB)
    interval_days=1,        # Interval hari per sesi (1 = per hari)
    lang='id',             # Kode bahasa: 'id', 'en', 'ja', dll
    search_type='top'      # 'top' = tweet teratas, 'latest' = terbaru
)

💡 Tips & Tricks

1. Scraping Banyak Tweet

Untuk hasil maksimal:

  • Gunakan interval kecil (1 hari) untuk dataset besar
  • Set target_per_session tidak terlalu tinggi (50-200)
  • Gunakan scroll_pause_time lebih besar (7-10 detik) untuk koneksi lambat

2. Menghindari Rate Limit

  • Jangan scraping terlalu cepat
  • Gunakan scroll_pause_time minimal 5 detik
  • Beri jeda antar sesi scraping
  • Jangan jalankan multiple instance bersamaan

3. Filter Bahasa Spesifik

Gunakan parameter lang dengan kode ISO 639-1:

  • id - Bahasa Indonesia
  • en - English
  • ja - Japanese
  • es - Spanish
  • fr - French
  • Dan lainnya...

4. Troubleshooting "No tweets found"

Jika tidak menemukan tweet:

  • Periksa koneksi internet
  • Pastikan auth_token masih valid
  • Coba dengan keyword yang lebih umum
  • Periksa rentang tanggal (mungkin tidak ada tweet di periode tersebut)

📋 Requirements

  • Python 3.7+
  • Chrome/Chromium browser
  • Dependencies (otomatis terinstall):
    • pandas >= 2.0.0
    • selenium >= 4.0.0
    • webdriver-manager >= 4.0.0

⚠️ Disclaimer & Legal

Tool ini dibuat untuk tujuan edukasi dan penelitian.

Pastikan Anda mematuhi:

Penulis tidak bertanggung jawab atas penyalahgunaan tool ini.

🐛 Troubleshooting

Error: "WebDriver not found"

Solusi: Package otomatis download ChromeDriver, pastikan Chrome terinstall.

Error: "Auth token invalid"

Solusi:

  1. Login ulang ke x.com
  2. Dapatkan auth_token baru
  3. Pastikan tidak ada spasi saat copy-paste

Error: "No tweets found"

Solusi:

  • Periksa koneksi internet
  • Verifikasi auth_token masih valid
  • Coba keyword lain atau rentang tanggal berbeda

Browser tidak muncul (headless mode)

Ini normal! Set headless=False jika ingin melihat browser:

scraper = TwitterScraper(auth_token=token, headless=False)

🤝 Contributing

Kontribusi sangat diterima!

  1. Fork repository ini
  2. Buat branch baru (git checkout -b feature/AmazingFeature)
  3. Commit perubahan (git commit -m 'Add some AmazingFeature')
  4. Push ke branch (git push origin feature/AmazingFeature)
  5. Buat Pull Request

📝 License

MIT License - lihat file LICENSE untuk detail lengkap.

💬 Support & Contact

🙏 Acknowledgments


Made with ❤️ for the data science & research community

⭐ Jika project ini membantu, berikan star di GitHub!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

panen_tweet-1.0.3.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

panen_tweet-1.0.3-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file panen_tweet-1.0.3.tar.gz.

File metadata

  • Download URL: panen_tweet-1.0.3.tar.gz
  • Upload date:
  • Size: 18.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for panen_tweet-1.0.3.tar.gz
Algorithm Hash digest
SHA256 f4324a325517f66fa87e9fa7a60d53f1c77103ae6e06bc9554f488a8037a13ff
MD5 8a521e4a4c3002e2a07d5a52f895a213
BLAKE2b-256 092309ab7a45d62dae8fbf970eed8db701f7022f6a1cbabe87dac023572c6579

See more details on using hashes here.

Provenance

The following attestation bundles were made for panen_tweet-1.0.3.tar.gz:

Publisher: workflows.yaml on DhaniAAA/panen-tweet

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panen_tweet-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: panen_tweet-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for panen_tweet-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d9c8e4f005be545457de5f8b9511f43cbf2fb6015dd810c63ea82dbd4afafdea
MD5 a8fcdcae1c08b2662bfb51a80ca8d2ea
BLAKE2b-256 502e965517db9f21de2ada1790edcdc808261bd40ab8ac5d03ce30ee7df6f338

See more details on using hashes here.

Provenance

The following attestation bundles were made for panen_tweet-1.0.3-py3-none-any.whl:

Publisher: workflows.yaml on DhaniAAA/panen-tweet

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page