Scrape github with python cover

اگر آپ جاننا چاہتے ہیں کہ ڈویلپرز خود کو کہاں گھر جیسا محسوس کرتے ہیں، جہاں وہ باہم جڑے اور معاونت یافتہ ہوں، تو GitHub وہ جگہ ہے۔ خواہ آپ سولو کوڈنگ کر رہے ہیں یا کسی عالمی ٹیک کمپنی میں کام کر رہے ہیں، یہ فنی ڈیٹا تک رسائی کے لیے ایک لازمی پلیٹ فارم ہے۔ GitHub میں ایک باضابطہ اور جامع API موجود ہے اور اکثر یہ آپ کا پہلا انتخاب ہونا چاہیے۔ تاہم، جب آپ کو مطلوبہ ڈیٹا API کے ذریعے دستیاب نہ ہو، تو ویب سکریپنگ ایک مفید متبادل ہو سکتی ہے۔  

یہ ٹیوٹوریل ہر اس شخص کے لیے کارآمد ہو گا جو GitHub، اس کے بنیادی عناصر، اور ٹرینڈنگ ریپوزٹریز کو کیسے سکریپ کرنے کے بارے میں مزید جاننا چاہتا ہے۔  

*ویب سکریپنگ ہمیشہ قانونی اور اخلاقی حدود کے اندر کی جانی چاہیے۔ ہم غیر قانونی سرگرمی کی حوصلہ افزائی نہیں کرتے اور صرف ذمہ دارانہ استعمال کی حکمت عملیوں کو اجاگر کرتے ہیں۔

I am raw html block.
Click edit button to change this html

GitHub کیا ہے اور یہ کیسے کام کرتا ہے؟

GitHub دنیا بھر میں ڈویلپرز کے لیے مرکزی مرکز بن گیا ہے۔ یہ کوڈ کی میزبانی کرنے، پروجیکٹس میں تعاون کرنے اور سافٹ ویئر تیار کرنے کا ایک پلیٹ فارم ہے۔ اس کی بنیاد Git پر ہے، جو دراصل ایک ورژن کنٹرول سسٹم ہے اور GitHub اسی پر قائم ہے۔ یہ نظام آپ کی زندگی کو آسان بناتا ہے کیونکہ آپ کو ایک ہی فائل کی متعدد نقول محفوظ رکھنے کی ضرورت نہیں رہتی۔ Git تبدیلیوں کی پوری تاریخ کو ایک جگہ پر رکھتا ہے۔ آپ ہمیشہ دیکھ سکتے ہیں کہ کیا تبدیل کیا گیا تھا، اسے کب تبدیل کیا گیا تھا، اور کس نے ترمیم کی تھی۔ ٹیموں میں کام کرنے والوں کے لیے یہ ایک بہترین انتخاب ہے۔  

فورکس، ریپوزٹریز، ستارے اور برانچز – یہ سب کچھ پہلے تھوڑا سا الجھا ہوا لگ سکتا ہے۔ لیکن ایک بار جب آپ یہ سمجھ لیں کہ Git کیسے کام کرتا ہے، تو یہ تصورات واضح ہونے لگتے ہیں۔Git میں، ایک ریپوزٹری آپ کے پروجیکٹ اور اس کی تاریخ محفوظ رکھتی ہے اور وقت کے ساتھ تبدیلیوں کا ریکارڈ بناتی ہے، شاخیں متوازی ترقی کی اجازت دیتی ہیں، اور ضم کرنے سے مکمل کام کو مرکزی پروجیکٹ میں ملایا جاتا ہے۔ بہاؤ کو سمجھنے میں آپ کی مدد کے لیے یہاں ایک سادہ بصری ہے:

ہم تجویز کرتے ہیں کہ پہلے ان اصطلاحات سے واقف ہو جائیں۔ ان کی وضاحت آپ سرکاری سائٹ پر دیکھ سکتے ہیں۔

مختصراً، یہ نظام ڈویلپرز کو ایک دوسرے کے کام کو اووررائٹ کیے بغیر مل کر کام کرنے کے قابل بناتا ہے۔  

* کیا GitHub کو سکریپ کرنا قانونی ہے؟

ہاں، یہ عام طور پر قانونی ہے بشرطیکہ آپ ان کی پابندی کریں سروس کی شرائط اور کاپی رائٹ اور رازداری کے قوانین کا احترام کریں۔ عوامی ریپوزٹریز، صارف پروفائلز، اور میٹا ڈیٹا جیسے ستارے، فورکس، اور کمٹ تک قانون کی خلاف ورزی کیے بغیر رسائی حاصل کی جا سکتی ہے۔  

تاہم، نجی ریپوزٹریز، صارف کی حساس معلومات، یا GitHub کی شرح کی حدود کی خلاف ورزی کرنے والی خودکار رسائی اکاؤنٹ کی معطلی یا قانونی نتائج کا باعث بن سکتی ہے۔ ہمیشہ اس بات کو یقینی بنائیں کہ آپ کی سکریپنگ سرگرمیاں اخلاقی ہیں، صارف کی رازداری کا احترام کریں، اور GitHub کے سرورز کو اوورلوڈ نہ کریں۔

GitHub سکریپنگ اور بدسلوکی کو کیسے ہینڈل کرتا ہے؟

بہت سے بڑے پلیٹ فارمز کی طرح، GitHub استحکام کو برقرار رکھنے اور خودکار غلط استعمال کو روکنے کے لیے سخت شرح کی حدود کا اطلاق کرتا ہے۔ فی گھنٹہ اجازت شدہ درخواستوں کی ایک مقررہ تعداد ہے جو ہر API ٹوکن یا تصدیق شدہ اکاؤنٹ کے پاس ہو سکتی ہے۔ یہ تقریباً 5,000 درخواستیں ہوتی ہیں۔ شرح کی حد تک پہنچنے پر عموماً 403 ممنوع کے جوابات ملتے ہیں۔ اگر یہ بدسلوکی کے ساتھ ہوتا ہے تو، صارفین کو عارضی یا مستقل اکاؤنٹ کی معطلی کا سامنا کرنا پڑ سکتا ہے۔ بوٹس کی مسلسل کوششوں کی وجہ سے، GitHub ٹریفک کے غیر معمولی رویے، IPبرسٹ، اور بار بار تصدیق کی ناکامیوں پر نظر رکھتا ہے۔

ڈیٹا اکٹھا کرنے اور قابل قبول حد کے اندر رہنے کے لیے، ڈویلپر پراکسیز کو اضافی تحفظ کے طور پر استعمال کرتے ہیں۔ پراکسیز ماخذ IP ایڈریسز کو باہر جانے والی درخواستوں میں گھماتے ہیں، ٹریفک کو اختتامی پوائنٹس پر تقسیم کرتے ہیں تاکہ GitHub کے انسداد بدسلوکی کے نظام کے ذریعے پکڑے جانے کا امکان کم ہو۔ اگر آپ کو یقین نہیں ہے کہ کس قسم کی پراکسی استعمال کرنا بہتر ہے، تو سکریپ کیے جانے والے ڈیٹا کی مقدار اور حساسیت جیسے عوامل پر غور کریں۔ DataImpulse پراکسیز سستی ہیں اور اعلی درجے کی وشوسنییتا اور رفتار کے لیے مشہور ہیں۔ ہم پلیٹ فارم کے قوانین کی خلاف ورزی کیے بغیر انہیں ذمہ داری اور اخلاقی طور پر استعمال کرنے کی تجویز کرتے ہیں۔

GitHub کے API قواعد کا احترام کریں، نجی ریپوزٹریز یا صارف کے حساس ڈیٹا کو کھرچنے سے گریز کریں۔

ابتدائی سیٹ اپ: کیا ڈاؤن لوڈ کرنا ہے؟  

  • Python3(تازہ ترین ورژن)

اسے ڈاؤن لوڈ کریں: یہاں۔ پھر VS Code میں Python ایکسٹینشن انسٹال کریں۔ ٹرمینل کھولیں، چیک کریں کہ آیا یہ انسٹال ہے:  


python3 --version 
      
        
      

  • بصری اسٹوڈیو کوڈ (یا دوسرا کوڈ ایڈیٹر، تازہ ترین ورژن)

اسے ڈاؤن لوڈ کریں: یہاںانسٹال کرنے کے بعد اپنا پروجیکٹ فولڈر کھولیں۔

  • DataImpulse ڈیش بورڈ سے پراکسی کی اسناد

DataImpulse میں سائن ان کریں اور اپنے پراکسی لاگ ان کی تفصیلات کاپی کریں۔

  • لائبریریاں: Requests اور BeautifulSoup؛ sys اور ٹائپنگ (Python کے بلٹ اِن ماڈیولز)۔

Requests – HTTP درخواستیں کرنے کے لیے استعمال کیا جاتا ہے۔

BeautifulSoup – HTML کو پارس کرنے اور GitHub کے ٹرینڈنگ صفحات سے ڈیٹا نکالنے کے لیے استعمال کیا جاتا ہے۔

sys – اگر کچھ غلط ہو جاتا ہے تو ایک خرابی کے پیغام کے ساتھ پروگرام کو روکنے کے لیے استعمال کیا جاتا ہے (sys.exit(…))۔

typing – ٹائپ ہنٹس فراہم کرتا ہے جو ہر فنکشن کے لیے متوقع ڈیٹا کی قسمیں بتاتا ہے۔

سب سے پہلے اپنے کمپیوٹر پر Terminal کھولیں اور pip:


python3 -m ensurepip 
      
        
      

پھر Python لائبریریاں انسٹال کریں:


pip3 install requests beautifulsoup4 
      
        
      

Enter دبائیں تاکہ معلوم ہو سکے کہ یہ انسٹال ہے یا نہیں۔

Python میں GitHub کو سکریپ کرنے کے بنیادی مراحل

  1. ہدف کا صفحہ منتخب کریں۔ – فیصلہ کریں کہ آپ کون سا GitHub صفحہ یا ریپوزٹری ڈیٹا اکٹھا کرنا چاہتے ہیں (مثال کے طور پر ٹرینڈنگ ریپوزٹریز، صارف پروفائلز)۔
  2. ایچ ٹی ایم ایل کی ساخت کا معائنہ کریں۔ – مطلوبہ ڈیٹا پر مشتمل عناصر کی شناخت کے لیے صفحہ کے HTML کی جانچ کریں۔
  3. HTTP درخواستیں بھیجیں۔ – Requests لائبریری کے ذریعے صفحہ کا مواد حاصل کریں۔
  4. جواب کو پارس کریں۔ – BeautifulSoup کے ذریعے HTML کو پارس کریں۔
  5. مطلوبہ ڈیٹا نکالیں۔ – مطلوبہ معلومات کی شناخت کریں اور نکالیں۔
  6. صفحہ بندی کو ہینڈل کریں۔ – تمام دستیاب اندراجات کو نکالنے کے لیے صفحات کے ذریعے لوپ کریں۔  
  7. نتائج محفوظ کریں – جمع کردہ ڈیٹا کو CSV، JSON، یا ڈیٹا بیس (اختیاری) میں محفوظ کریں۔

ہماری عملی مثال:  

اپنی عملی مثال میں ہم نے ٹرینڈنگ ریپوزٹریز کا صفحہ استعمال کیا۔ مکمل کوڈ کا اشتراک کرنے سے پہلے، آئیے مختصراً اس کے اہم اجزاء پر غور کریں۔

  • پراکسی کنفیگریشن

پراکسی – آپ کے DataImpulse ڈیش بورڈ سے پراکسی کی اسناد (میزبان، بندرگاہ، صارف نام، پاس ورڈ)۔ ان اقدار کو اپنی پراکسی اسناد سے بدلیں۔
ٹائم آؤٹ – درخواست کے لیے زیادہ سے زیادہ وقت (20 سیکنڈ)۔
VERIFY_SSL HTTPS کنکشن کو یقینی بناتا ہے۔
USER_AGENT – بنیادی بوٹ چیک کو نظرانداز کرنے کے لیے ایک حقیقی براؤزر کی نقل کرتا ہے۔

  •  GitHub ٹرینڈنگ فلٹرز

زبان – آپ کی پروگرامنگ زبان (سب کے لیے None ہو سکتی ہے)۔
since: وقت کی حد: روزانہ، ہفتہ وار، ماہانہ.


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"
      
        
   
   
   
   
   
   
      

آغاز کے لیے یہ سادہ کوڈ آزمائیں:  


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)
      
        
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
      

کوڈ کے اگلے حصے میں، ہم فنکشنز استعمال کریں گے۔ یہ کوڈ کو صاف ستھرا، دوبارہ قابل استعمال، ڈیبگ کرنے میں آسان اور برقرار رکھنے کے قابل بناتے ہیں، جو GitHub کو سکریپ کرنے یا متعدد پراکسیز کو سنبھالنے جیسے پیچیدہ کاموں کے لیے خاص طور پر اہم ہے۔

  • فنکشنز  

log: کنسول آؤٹ پٹ کو فارمیٹ کرتا ہے۔
build_proxies – پراکسی اسٹرنگ بناتا ہے (صارف نام: پاس ورڈ @ میزبان: پورٹ).
test_proxy – پراکسی کے ذریعے کنکشن چیک کرتا ہے۔ https://api.ipify.org?format=json.
scrape_github_trending – BeautifulSoup4 کا استعمال کرتے ہوئے HTML کو پارس کرتا ہے۔
main: سکریپنگ کا عمل شروع کرتا ہے۔

یہاں کوڈ کا مکمل ورژن ہے:  


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()
      
        
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
      

نتیجے میں، ہمارا Terminal 14 ٹرینڈنگ ریپوزٹریز کی واضح فہرست دکھاتا ہے۔

حتمی خیالات اور سفارشات

GitHub کو سکریپ کرنا ایک مفید ہنر ہے، لیکن اخلاقی اور تکنیکی اصولوں کی پابندی کرنا ضروری ہے۔ ابتدائی افراد Gemini Bot کے ساتھ بھی شروع کر سکتے ہیں، جو بغیر کوڈنگ کے ساختہ ڈیٹا کو نکالتا ہے۔ آپ کو صرف ایک بوٹ بنانے اور پرامپٹ لکھنے کی ضرورت ہے، اس طرح:  

اس GitHub ریپوزٹری کے صفحے کا تجزیہ کریں اور درج ذیل معلومات نکالیں:

– ریپوزٹری کا نام

– ستاروں کی تعداد

– بنیادی پروگرامنگ زبان

– آخری کمٹ کی تاریخ

ڈیٹا کو JSON فارمیٹ میں واپس کریں۔

بس اتنا ہی۔ تاہم، ہم تخلیقی صلاحیتوں کی حوصلہ افزائی کرتے ہیں اور تجویز کرتے ہیں کہ ڈویلپرز نئے آئیڈیاز کی جانچ کریں، ٹولز کو یکجا کریں، اور طریقوں کو اپنے پراجیکٹس کے مطابق بنائیں۔ پراکسیز استعمال کریں، ہمیشہ GitHub کی سروس کی شرائط کا احترام کریں، مخصوص زبانوں یا ٹرینڈنگ کے ادوار کو نشانہ بنانے کے لیے فلٹرز کا استعمال کریں، درخواستوں کو لاگ اور مانیٹر کریں، اور بتدریج پیمانہ بڑھانے کے لیے پہلے چند ریپوزٹریوں کے ساتھ تجربہ کریں۔

Share article: