Scrape github with python cover

Se você deseja saber onde todos os desenvolvedores se sentem em casa, com suporte e conectados, entãoGitHubé o lugar para estar. Não importa se você está programando sozinho ou trabalhando em uma empresa global de tecnologia, é uma plataforma obrigatória para acessar dados técnicos.GitHubinclui umAPIoficial rico em recursos e, em muitos casos, deve ser sua primeira escolha. No entanto, quando os dados de que você precisa não estão disponíveis por meio doAPI, o web scraping pode ser uma alternativa útil.  

Este tutorial será útil para todos que desejam saber mais sobreGitHub, seus elementos principais e como extrair repositórios de tendências.  

*A web scraping deve sempre ser realizada dentro dos limites legais e éticos. Não incentivamos atividades ilegais e destacamos apenas estratégias de uso responsável.

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

O que éGitHube como funciona

GitHubse tornou o centro central para desenvolvedores em todo o mundo. É uma plataforma para hospedar código, colaborar em projetos e criar software. O nome é construído em torno Git, que é, na verdade, um sistema de controle de versão no qual oGitHubé construído. Este sistema facilita sua vida porque você não precisa salvar vários arquivos, pois oGitmantém um histórico completo de alterações em um só lugar. Você sempre pode ver o que foi alterado, quando foi alterado e quem fez a modificação. É uma ótima opção para quem trabalha em equipe.  

Garfos, repositórios, estrelas, galhos – tudo isso pode parecer um pouco confuso no início. Mas depois de entender como funciona oGit, esses conceitos começam a fazer sentido. NoGit, um repositório contém seu projeto e seu histórico, confirma alterações de registros ao longo do tempo, ramificações permitem o desenvolvimento paralelo e a fusão combina o trabalho concluído no projeto principal. Aqui está um visual simples para ajudá-lo a entender o fluxo:

Aconselhamos verificar estes termos previamente; você pode encontrá-los em seus site oficial.

Resumindo, este sistema permite que os desenvolvedores trabalhem juntos sem sobrescrever o trabalho uns dos outros.  

*É legal rasparGitHub?

Sim, geralmente é legal, desde que você cumprir com os seus Termos de Serviço e respeitar as regras de direitos autorais e privacidade. Repositórios públicos, perfis de usuários e metadados como estrelas, forks e commits podem ser acessados ​​sem violar a lei.  

No entanto, repositórios privados, informações confidenciais do usuário ou acesso automatizado que viole os limites de taxas doGitHubpodem levar à suspensão da conta ou a consequências legais. Sempre certifique-se de que suas atividades de scraping sejam éticas, respeitem a privacidade do usuário e não sobrecarreguem os servidores doGitHub.

Como oGitHublida com scraping e abuso?

Como muitas plataformas principais,GitHubaplica limites de taxa rígidos para manter a estabilidade e evitar abusos automatizados. Há um número fixo de solicitações permitidas por hora que cada tokenAPIou conta autenticada pode ter. São aproximadamente solicitações5,000. Atingir o limite de taxa normalmente leva a 403Proibido respostas. Se isso for acompanhado de comportamento abusivo, os usuários poderão enfrentar a suspensão temporária ou permanente da conta. Devido às tentativas contínuas de bot, oGitHubmonitora o comportamento anormal do tráfego, rajadas deIPe falhas repetidas de autenticação.

Para coletar dados e permanecer dentro dos limites aceitáveis, os desenvolvedores implementam proxies como proteção de backup. Os proxies alternam os endereçosIPde origem nas solicitações de saída, distribuindo o tráfego entre os endpoints para que você tenha menos probabilidade de ser pego pelos sistemas antiabuso doGitHub. Se você não tiver certeza de qual tipo de proxy é melhor usar, considere fatores como o volume de extração e a sensibilidade dos dados. ProxiesDataImpulse são acessíveis e conhecidos pela confiabilidade e velocidade de alto nível. Recomendamos usá-los de forma responsável e ética, sem violar as regras da plataforma.

Respeite as regrasAPIdoGitHub, evite copiar repositórios privados ou dados confidenciais do usuário.

Configuração inicial: o que baixar?  

  • Python3(a versão mais recente)

Download aqui, instale a extensãoPythonemVS Code. Abra um terminal, verifique se ele está instalado com:  


python3 --version 
      
        
      

  • Visual Studio Code (ou outro editor de código, a versão mais recente)

Download aqui, instale e abra a pasta do projeto.

  • Credenciais de proxy do painelDataImpulse

Faça login emDataImpulsee copie os detalhes de login do proxy.

  • Bibliotecas:RequestseBeautifulSoup; sys e digitação (módulosPythonintegrados).

Requests – usado para fazer solicitaçõesHTTP.

BeautifulSoup – usado para analisar HTML e extrair dados das páginas de tendênciasGitHub.

sys – usado para parar o programa com uma mensagem de erro se algo der errado (sys.exit(…)).

digitação – fornece dicas de tipo que especificam os tipos de dados esperados para cada função.

Em primeiro lugar, abraTerminalno seu computador e instale pip:


python3 -m ensurepip 
      
        
      

Em seguida, instale as bibliotecasPythonusando:


pip3 install requests beautifulsoup4 
      
        
      

Pressione Enter e você verá se eles foram instalados.

Etapas comuns para rasparGitHubemPython

  1. Escolha a página de destino – Decida qual páginaGitHubou dados de repositório você deseja coletar (por exemplo, repositórios de tendências, perfis de usuário).
  2. Inspecione a estrutura HTML – Examine o HTML da página para identificar os elementos que contêm os dados necessários.
  3. Enviar solicitaçõesHTTP – Use uma biblioteca como solicitações para recuperar o conteúdo da página.
  4. Analise a resposta – Usar BeautifulSoup para processar o HTML.
  5. Extraia os dados necessários – Identifique e extraia as informações específicas que você precisa.
  6. Lidar com paginação – Percorra as páginas para extrair todas as entradas disponíveis.  
  7. Armazenar resultados – Salve os dados coletados em um CSV,JSONou banco de dados (opcional).

Nosso exemplo prático:  

Para o nosso caso de raspagem, usamos a página de repositórios de tendências.  Antes de compartilhar o código completo, vamos examinar brevemente seus principais componentes.

  • Configuração de proxy

PROCURADOR – credenciais de proxy do seu painelDataImpulse(host, porta, nome de usuário, senha). Substitua esses valores pelas suas próprias credenciais.
TEMPO ESGOTADO – tempo máximo de solicitação (segundos20).
VERIFY_SSL – garante a conexãoHTTPS.
USER_AGENT – imita um navegador real para ignorar verificações básicas de bot.

  •  Filtros de tendênciasGitHub

LINGUAGEM – sua linguagem de programação (pode ser Nenhum para todos).
DESDE – intervalo de tempo: diariamente, semanalmente, mensalmente.


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"
      
        
   
   
   
   
   
   
      

Aqui está o primeiro código simples que você pode tentar:  


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)
      
        
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
      

No próximo trecho de código, usaremos funções. Eles tornam o código mais limpo, reutilizável, mais fácil de depurar e de fácil manutenção, o que é especialmente importante para tarefas complexas, como raspagem deGitHubou manipulação de vários proxies.

  • Funções  

registro – formata a saída do console.
build_proxies – cria uma string proxy (nome de usuário:senha@host:porta).
test_proxy – verifica o proxy via https://api.ipify.org?format=json.
scrape_github_trending – analisa HTML usando BeautifulSoup4.
principal – inicia o processo de raspagem.

Aqui está a versão completa do código:  


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

Como resultado, nossoTerminalexibe uma lista limpa de repositórios de tendências14.

Considerações Finais e Recomendações

RasparGitHubé uma habilidade útil para se ter em mãos, mas é importante seguir aspectos éticos e técnicos. Os iniciantes podem até começar comGemini Bot, que extrai dados estruturados sem codificação. Você só precisa criar um bot e escrever o prompt, assim:  

Analise esta página do repositórioGitHube extraia as seguintes informações:

– Nome do repositório

– Número de estrelas

– Linguagem de programação primária

– Data do último commit

Retorne os dados no formatoJSON.

E é isso. No entanto, incentivamos a criatividade e sugerimos que os desenvolvedores testem novas ideias, combinem ferramentas e adaptem métodos aos seus próprios projetos. Implemente proxies, sempre respeite os Termos de Serviço doGitHub, use filtros para direcionar idiomas específicos ou períodos de tendência, registre e monitore solicitações e experimente primeiro alguns repositórios para aumentar gradualmente.

Share article: