In this Article
Jika Anda ingin tahu di mana semua pengembang merasa betah, didukung dan terhubung, maka GitHub adalah tempatnya. Baik Anda melakukan coding sendiri atau bekerja di perusahaan teknologi global, ini adalah platform yang harus dimiliki untuk mengakses data teknis. GitHub menyertakan API resmi yang kaya fitur, dan dalam banyak kasus, ini harus menjadi pilihan pertama Anda. Namun, ketika data yang Anda perlukan tidak tersedia melalui API, web scraping dapat menjadi alternatif yang berguna.Tutorial ini akan berguna bagi semua orang yang ingin mengetahui lebih banyak tentang GitHub, elemen intinya, dan cara melakukan scraping repositori yang sedang tren.*Web scraping harus selalu dilakukan dalam batasan hukum dan etika. Kami tidak mendorong aktivitas ilegal dan hanya menyoroti strategi penggunaan yang bertanggung jawab.
I am raw html block.
Click edit button to change this html
Apa Itu GitHub dan Cara Kerjanya
GitHub telah menjadi pusat utama bagi pengembang di seluruh dunia. Ini adalah platform untuk menempatkan kode, berkolaborasi dalam proyek, dan membuat perangkat lunak. Nama itu dibangun di sekitarGit, yang sebenarnya merupakan sistem kontrol versi tempat GitHub dibangun. Sistem ini membuat hidup Anda lebih mudah karena Anda tidak perlu menyimpan banyak file, karena Git menyimpan riwayat lengkap perubahan di satu tempat. Anda selalu dapat melihat apa yang diubah, kapan diubah, dan siapa yang melakukan modifikasi. Ini adalah pilihan tepat bagi mereka yang bekerja dalam tim.Forks, repo, bintang, cabang , semua ini mungkin terdengar agak membingungkan pada awalnya. Namun begitu Anda memahami cara kerja Git, konsep-konsep ini mulai masuk akal. Di Git, repositori menyimpan proyek Anda dan riwayatnya, commit mencatat perubahan seiring waktu, cabang memungkinkan pengembangan paralel, dan penggabungan menggabungkan pekerjaan yang sudah selesai ke dalam proyek utama. Berikut visual sederhana untuk membantu Anda memahami alurnya:
Kami menyarankan untuk memeriksa ketentuan ini terlebih dahulu; Anda dapat menemukannya di mereka
situs resmi.Singkatnya, sistem ini memungkinkan pengembang untuk bekerja sama tanpa menimpa pekerjaan satu sama lain.
* Apakah legal untuk melakukan scraping GitHub?
Ya, secara umum legal selama Andamematuhi mereka
Ketentuan Layanandan hormati aturan hak cipta dan privasi.Repositori publik, profil pengguna, dan metadata seperti stars, fork, dan commit dapat diakses tanpa melanggar hukum.Namun, repositori pribadi, informasi sensitif pengguna, atau akses otomatis yang melanggar batas request GitHub dapat mengakibatkan penangguhan akun atau konsekuensi hukum. Selalu pastikan aktivitas scraping Anda etis, hormati privasi pengguna, dan jangan membebani server GitHub.
Bagaimana GitHub menangani scraping dan penyalahgunaan?
Seperti banyak platform besar, GitHub menerapkan batasan tarif yang ketat untuk menjaga stabilitas dan mencegah penyalahgunaan otomatis. Ada jumlah tetap requests yang diizinkan per jam yang dapat dimiliki oleh setiap token API atau akun yang diautentikasi. Sekitar 5.000 requests. Mencapai batas request biasanya mengarah pada403 Dilarang
Tanggapan. Jika hal ini disertai dengan perilaku kasar, pengguna mungkin menghadapi penangguhan akun sementara atau permanen. Karena upaya bot yang sedang berlangsung, GitHub memantau perilaku lalu lintas yang tidak normal, lonjakan IP, dan kegagalan otentikasi berulang.Untuk mengumpulkan data dan tetap berada dalam ambang batas yang dapat diterima, pengembang menerapkan proxy sebagai perlindungan cadangan. Proxy menggilir alamat IP sumber di seluruh requests keluar, mendistribusikan lalu lintas di seluruh endpoint sehingga kecil kemungkinan Anda tertangkap oleh sistem anti-penyalahgunaan GitHub. Jika Anda tidak yakin jenis proxy mana yang lebih baik untuk digunakan, pertimbangkan faktor-faktor seperti volume scraping dan sensitivitas data.
ProxyDataImpulseterjangkau dan terkenal dengan keandalan dan kecepatan tingkat atas. Kami merekomendasikan penggunaannya secara bertanggung jawab dan etis tanpa melanggar aturan platform.Hormati aturan API GitHub, hindari melakukan scraping repositori pribadi atau data pengguna yang sensitif.
Pengaturan Awal: Apa yang Harus Diunduh?
- Python 3 (versi terbaru)
Unduhdi sini, instal ekstensi Python di VS Code. Buka terminal, periksa apakah sudah diinstal dengan:
python3 --version
- Visual Studio Code (atau editor kode lain, versi terbaru)
Unduhdi sini, instal, dan buka folder proyek Anda.
- Kredensial
- Proxy dari dasbor DataImpulse
Masuk ke DataImpulse dan salin detail login proxy Anda.
- Pustaka: Requests dan BeautifulSoup; sys dan typing (modul Python bawaan).
Requests , digunakan untuk membuat HTTP requests.BeautifulSoup , digunakan untuk mengurai HTML dan mengekstrak data dari halaman Trending GitHub.sys , digunakan untuk menghentikan program dengan pesan kesalahan jika terjadi kesalahan (sys.exit(…)).typing , memberikan petunjuk tipe yang menentukan tipe data yang diharapkan untuk setiap fungsi.Pertama, buka Terminal di komputer Anda dan instalpip:
python3 -m ensurepip
Kemudian, instal perpustakaan Python menggunakan:
pip3 install requests beautifulsoup4
Tekan Enter, dan Anda akan melihat apakah sudah diinstal.
Langkah Umum untuk Melakukan scraping GitHub di Python
- Pilih halaman target– Tentukan halaman GitHub atau data repositori mana yang ingin Anda kumpulkan (misalnya, repositori yang sedang tren, profil pengguna).
- Periksa struktur HTML– Periksa HTML halaman untuk mengidentifikasi elemen yang berisi data yang diperlukan.
- Kirim HTTP requests– Gunakan perpustakaan sepertirequestsuntuk mengambil konten halaman.
- Parse responsnya– GunakanBeautifulSoupuntuk memproses HTML.
- Ekstrak data yang diperlukan– Identifikasi dan ekstrak informasi spesifik yang Anda butuhkan.
- Menangani penomoran halaman– Ulangi halaman untuk mengekstrak semua entri yang tersedia.
- Store– Simpan data yang dikumpulkan dalam CSV, JSON, atau database (opsional).
Hasil
Contoh Praktis Kami:
Untuk kasus scraping kami, kami menggunakan halamanrepositori yang sedang tren. Sebelum membagikan kode lengkapnya, mari kita bahas secara singkat komponen utamanya.
- Konfigurasi
- Proxy
PROXY, Kredensial proxy dari dasbor DataImpulse Anda (host, port, nama pengguna, kata sandi). Ganti nilai-nilai ini dengan kredensial Anda sendiri.TIMEOUT, waktu request maks (20 detik).VERIFY_SSL, memastikan koneksi HTTPS.USER_AGENT, meniru browser asli untuk melewati pemeriksaan bot dasar.
- Filter GitHub Trending
BAHASA, bahasa pemrograman Anda (bisa jugaTidak adauntuk semua).SEJAK, rentang waktu:harian, mingguan, bulanan.
TIMEOUT = 20 # seconds
VERIFY_SSL = True
USER_AGENT = (
"Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/118.0.0.0 Safari/537.36"
Berikut adalah kode sederhana pertama yang dapat Anda coba:
import requests
from bs4 import BeautifulSoup
LANGUAGE = "python" # Programming language. None can be used as "Any" parameter in GitHub Trending
SINCE = "daily" # Date range: daily / weekly / monthly
PROXY = {
"host": "DATAIMPULSE HOST",
"port": "DATAIMPULSE PORT",
"user": "DATAIMPULSE LOGIN",
"pass": "DATAIMPULSE PASSWORD",
}
# Proxy configuration
proxy_url = f"http://{PROXY['user']}:{PROXY['pass']}@{PROXY['host']}:{PROXY['port']}"
proxies = {
"http": proxy_url,
"https": proxy_url,
}
# Checking proxies
ip = requests.get("https://api.ipify.org", proxies=proxies).text
print("Your IP:", ip)
# Scraping Github Trending section
url = "https://github.com/trending"
# Adding parameters like Language and Date Range, and make HTTP request to GitHub
params = {"since": SINCE}
if LANGUAGE:
params["language"] = LANGUAGE
headers = {
"User-Agent": "Mozilla/5.0"
}
r = requests.get(
url,
headers=headers,
params=params,
proxies=proxies,
timeout=20
)
# Scrape and output details
soup = BeautifulSoup(r.text, "html.parser")
print("\n🔥 GitHub Trending:\n")
for count, repo in enumerate(soup.select("article.Box-row"), start=1):
name = repo.h2.text.strip().replace("\n", "").replace(" ", "")
link = "https://github.com" + repo.h2.a["href"]
desc = repo.p.text.strip() if repo.p else "No description"
stars_today = repo.select_one("span.d-inline-block.float-sm-right").text.strip() if repo.select_one("span.d-inline-block.float-sm-right") else None
print(f"{count}. {name}")
print(f"Link: {link}")
print(f"Stars Today: {stars_today}")
print(f"Description: {desc}")
print("-" * 40)
Pada potongan kode berikutnya, kita akan menggunakan fungsi. Mereka membuat kode lebih bersih, dapat digunakan kembali, lebih mudah untuk ditelusuri kesalahannya, dan dipelihara, yang sangat penting untuk tugas-tugas kompleks seperti melakukan scraping GitHub atau menangani banyak proxy.
- Fungsi
log, memformat keluaran konsol.build_proxy, membuat string proxy (nama pengguna: kata sandi@host:port).test_proxy, memeriksa proxy melaluihttps://api.ipify.org?format=json.scrape_github_trending, mengurai HTML menggunakan BeautifulSoup4.utama, memulai proses scraping.Berikut adalah versi lengkap kodenya:
import sys
import requests
from bs4 import BeautifulSoup
from typing import List, Dict, Optional
# =========================================================
# CONFIG — CHANGE ONLY THIS SECTION
# =========================================================
GITHUB_TRENDING_URL = "https://github.com/trending"
# Proxy configuration (leave PROXY = None to disable proxy)
PROXY = {
"host": "DATAIMPULSE HOST",
"port": "DATAIMPULSE PORT",
"username": "DATAIMPULSE LOGIN",
"password": "DATAIMPULSE PASSWORD",
}
# PROXY = None # uncomment to disable proxy completely
LANGUAGE = "python" # e.g. "python", "javascript", or None
SINCE = "daily" # "daily", "weekly", "monthly"
TIMEOUT = 20 # seconds
VERIFY_SSL = True
USER_AGENT = (
"Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/118.0.0.0 Safari/537.36"
)
# =========================================================
# END CONFIG
# =========================================================
def log(msg: str) -> None:
print(f"[INFO] {msg}")
def build_proxies(proxy_cfg: Optional[Dict]) -> Optional[Dict[str, str]]:
if not proxy_cfg:
return None
proxy_url = (
f"http://{proxy_cfg['username']}:{proxy_cfg['password']}"
f"@{proxy_cfg['host']}:{proxy_cfg['port']}"
)
return {
"http": proxy_url,
"https": proxy_url,
}
def test_proxy(proxies: Optional[Dict[str, str]]) -> None:
log("Testing proxy...")
r = requests.get(
"https://api.ipify.org?format=json",
proxies=proxies,
timeout=10,
)
r.raise_for_status()
log(f"Proxy OK. Outgoing IP: {r.json()['ip']}")
def scrape_github_trending(
language: Optional[str],
since: str,
proxies: Optional[Dict[str, str]],
timeout: int,
) -> List[Dict]:
headers = {"User-Agent": USER_AGENT}
params = {"since": since}
if language:
params["language"] = language
log("Fetching GitHub Trending page...")
response = requests.get(
GITHUB_TRENDING_URL,
headers=headers,
params=params,
proxies=proxies,
timeout=timeout,
verify=VERIFY_SSL,
)
response.raise_for_status()
soup = BeautifulSoup(response.text, "lxml")
repos = []
for article in soup.select("article.Box-row"):
name = (
article.h2.text
.replace("\n", "")
.replace(" ", "")
.strip()
)
url = "https://github.com" + article.h2.a["href"]
description = article.p.text.strip() if article.p else None
language_el = article.select_one(
'[itemprop="programmingLanguage"]'
)
stars_today_el = article.select_one(
"span.d-inline-block.float-sm-right"
)
repos.append({
"name": name,
"url": url,
"description": description,
"language": (
language_el.text.strip()
if language_el else None
),
"stars_today": (
stars_today_el.text.strip()
if stars_today_el else None
),
})
return repos
def main() -> None:
proxies = build_proxies(PROXY)
# 1) Test proxy
try:
if proxies:
test_proxy(proxies)
else:
log("Proxy disabled.")
except Exception as e:
sys.exit(f"[ERROR] Proxy test failed: {e}")
# 2) Scrape GitHub Trending
try:
repos = scrape_github_trending(
language=LANGUAGE,
since=SINCE,
proxies=proxies,
timeout=TIMEOUT,
)
except Exception as e:
sys.exit(f"[ERROR] Scraping failed: {e}")
# 3) Output
print("\n🔥 GitHub Trending Repositories\n")
print(f"Language: {LANGUAGE or 'All'} | Since: {SINCE}\n")
for i, repo in enumerate(repos, 1):
print(f"{i}. {repo['name']}")
print(f" URL: {repo['url']}")
print(f" Language: {repo['language']}")
print(f" Stars today: {repo['stars_today']}")
if repo["description"]:
print(f" Description: {repo['description']}")
print()
log(f"Done. Total repositories: {len(repos)}")
if __name__ == "__main__":
main()
A Hasilnya, Terminal kami menampilkan daftar bersih 14 repositori yang sedang tren.
Pemikiran dan Rekomendasi Akhir
Scraping GitHub adalah keterampilan praktis yang harus Anda miliki, tetapi penting untuk mengikuti aspek etika dan teknis. Pemula bahkan dapat memulai dengan Gemini Bot, yang mengekstrak data terstruktur tanpa coding. Anda hanya perlu membuat bot dan menulis promptnya, seperti ini:Analisis halaman repositori GitHub ini dan ekstrak informasi berikut:– Nama repositori– Jumlah bintang– Bahasa pemrograman utama– Tanggal commit terakhirKembalikan data dalam format JSON.Dan itu saja. Namun, kami mendorong kreativitas dan menyarankan pengembang menguji ide-ide baru, menggabungkan alat, dan menyesuaikan metode dengan proyek mereka sendiri. Gunakan proxy, selalu hormati Ketentuan Layanan GitHub, gunakan filter untuk menargetkan bahasa tertentu atau periode tren, catat dan pantau requests, dan bereksperimenlah dengan beberapa repositori terlebih dahulu untuk ditingkatkan secara bertahap.



