Scrapowanie danych z GitHub poza limitem API: Gwiazdki, Zależności
API GitHub ogranicza nieautoryzowane wywołania do 60 na godzinę i całkowicie ukrywa zależności oraz trendy. Oto jak wydobywać istotne sygnały przy użyciu tanich IP.
GitHub to kopalnia złota dla badań - krzywe adopcji, dynamika konkurencji, grafy zależności, sygnały rekrutacyjne - a jego oficjalne API dostarczy ci część z tego za darmo. Potem się zatrzymuje. Nieautoryzowane wywołania są ograniczone do 60 na godzinę, a dwa zestawy danych, które ludzie najbardziej chcą, graf zależności i strona trendów, nie są w ogóle w API. Ten przewodnik obejmuje, jak scrapować dane z GitHub poza tymi limitami: co daje API, co musisz odczytać z HTML, i dlaczego GitHub jest rzadkim celem, gdzie tanie proxy z centrów danych i IPv6 są właściwym narzędziem.
Znaj granice zanim zaczniesz z nimi walczyć
Zacznij od API - jest uporządkowane, zatwierdzone i tanie w użyciu, jeśli się uwierzytelniasz. Liczby, które kształtują wszystko: nieautoryzowane żądania REST są ograniczone do 60 na godzinę, liczone na IP; uwierzytelniony token daje 5,000 na godzinę; API wyszukiwania jest jeszcze bardziej restrykcyjne, 30 żądań na minutę uwierzytelnionych (10 nieautoryzowanych). Kluczowym szczegółem jest to, że nieautoryzowany limit jest liczony na IP - co jest dokładnie powodem, dla którego kierowanie odczytów przez wiele IP zwiększa twoje możliwości.
import requests
# Authenticated API call - watch the rate-limit headers
headers = {"Authorization": "Bearer YOUR_GH_TOKEN",
"Accept": "application/vnd.github+json"}
r = requests.get("https://api.github.com/repos/psf/requests", headers=headers, timeout=15)
repo = r.json()
print(repo["stargazers_count"], repo["forks_count"], repo["open_issues_count"])
print("remaining this hour:", r.headers["X-RateLimit-Remaining"])
Używaj API do wszystkiego, co eksponuje czysto, a używaj git clone do zawartości plików - klonowanie i przetwarzanie repozytorium lokalnie jest szybsze i łagodniejsze niż scrapowanie pojedynczych stron plików. Scrapowanie HTML jest dla sygnałów, które API ogranicza do bezużyteczności lub całkowicie pomija.
Co musisz odczytać z HTML
Trzy wartościowe zestawy danych istnieją tylko na renderowanych stronach. Graf zależności - liczba "Używane przez" GitHub i lista repozytoriów zależnych od pakietu - to jeden z najsilniejszych wskaźników adopcji, a nie ma go w API. Strony trendów (github.com/trending, filtrowalne według języka i okna) są tylko w HTML. A strony tematów prezentują repozytoria według tematu znacznie bardziej użytecznie niż pozwala na to limit wyszukiwania. Wszystkie trzy to zwykły HTML renderowany po stronie serwera, więc proste żądanie i parsowanie działa - nie jest potrzebna przeglądarka.
import requests
from bs4 import BeautifulSoup
# Scrape the trending page through a datacenter proxy
PROXY = "http://USER:PASS@dc.quantumproxies.io:8000"
def trending(language="python", since="daily"):
url = f"https://github.com/trending/{language}?since={since}"
r = requests.get(url, proxies={"https": PROXY}, timeout=20,
headers={"User-Agent": "Mozilla/5.0"})
soup = BeautifulSoup(r.text, "html.parser")
repos = []
for row in soup.select("article.Box-row"):
name = row.select_one("h2 a")["href"].strip("/")
stars = row.select_one("a[href$='/stargazers']")
repos.append({"repo": name,
"stars": stars.get_text(strip=True) if stars else None})
return repos
print(trending("rust", "weekly")[:5])

GitHub to cel dla centrów danych (i może IPv6)
Oto część, którą ludzie nadmiernie komplikują. Publiczne strony GitHub są renderowane po stronie serwera, łagodne i nie mają agresywnych wyzwań JavaScript - więc nie potrzebujesz premium IP rezydencyjnych, aby je odczytać. To podręcznikowy przypadek dla proxy z centrów danych: tanie, szybkie i obfite, rozłożone szeroko, aby żadne pojedyncze IP nie zbliżało się do nieautoryzowanego limitu ani nie wywoływało dodatkowego limitu szybkości. Sięganie po rezydencyjne tutaj to płacenie luksusowych cen za zadanie, które ekonomiczne IP wykonuje doskonale. Nasz przewodnik na temat kiedy proxy z centrów danych są właściwym wyborem wyjaśnia dokładnie tego rodzaju łagodny, wysokoprzepustowy cel.
Istnieje jeszcze tańsza opcja warta przetestowania: IPv6. Gdy cel odpowiada przez IPv6, pule proxy IPv6 dają ogromną, niskokosztową przestrzeń adresową - idealną do rozłożenia odczytów ograniczonych na IP na tysiące wyjść. GitHub wprowadza obsługę IPv6, więc jest jednym z niewielu dużych celów, gdzie warto to sprawdzić, a nie zakładać. Przetestuj to, zanim się zdecydujesz: przepuść cel przez nasz darmowy tester zgodności IPv6 i przeczytaj o ekonomii w naszym kompletnym przewodniku po proxy IPv6.
Zdobądź szybkie proxy z centrów danych dla GitHub
Uważaj na dodatkowy limit szybkości
Limity na godzinę to nie jedyne ograniczenie, z którym się spotkasz. GitHub również prowadzi wykrywanie nadużyć, które reaguje na gwałtowne, bardzo równoczesne lub podejrzanie regularne ruchy - więc nawet gdy jesteś wygodnie poniżej limitu liczbowego, uderzanie z jednego IP może spowodować tymczasową blokadę. Obrony są takie same, które czynią cię uprzejmym klientem: ogranicz równoczesność, dodaj trochę losowości między żądaniami, honoruj każdy nagłówek Retry-After, który serwer ci przekazuje, i rozłóż obciążenie, aby żadne pojedyncze wyjście nigdy nie miało wzorca ucieczki. To jest prawdziwy powód, dla którego szeroka pula ma znaczenie - to nie tylko arytmetyka 60 na godzinę, to że żadne indywidualne IP nigdy nie powinno wyglądać jak skrypt, który się wymknął spod kontroli. Wycofaj się przy pierwszym 403 lub spowolnieniu zamiast ponawiać prosto w dłuższą blokadę.
Przekształcanie danych repozytorium w informacje o narzędziach deweloperskich
Celem tego wszystkiego jest warstwa analizy. Śledź prędkość gwiazdek i liczbę zależności biblioteki konkurenta w czasie, a obserwujesz adopcję w czasie rzeczywistym. Porównuj strony trendów według języka tydzień po tygodniu, aby dostrzec rosnące narzędzia, zanim staną się oczywiste. Pobieraj listy współtwórców, aby odczytać rozmiar zespołu i sygnały rekrutacyjne. Łącz podziały językowe w ramach tematu, aby mapować cały ekosystem. Rób zrzuty repozytoriów według harmonogramu, przechowuj każde przechwycenie z datą, a różnice stają się produktem - dynamika, a nie pojedyncza liczba. Jednorazowy odczyt 40,000 gwiazdek to ciekawostka; to samo repozytorium dodające 2,000 gwiazdek tygodniowo, podczas gdy liczba zależności rośnie, to prawdziwy sygnał adopcji, na który możesz zareagować, zanim zauważy to szerszy rynek.
import requests
from bs4 import BeautifulSoup
# The 'Used by' dependents count - a top adoption signal, HTML-only
def used_by(owner, repo):
url = f"https://github.com/{owner}/{repo}/network/dependents"
proxy = "http://USER:PASS@dc.quantumproxies.io:8000"
r = requests.get(url, proxies={"https": proxy}, timeout=20,
headers={"User-Agent": "Mozilla/5.0"})
soup = BeautifulSoup(r.text, "html.parser")
tab = soup.select_one("a.btn-link.selected")
return tab.get_text(strip=True) if tab else None
print(used_by("pallets", "flask")) # e.g. '1.4m Repositories'
Jeden nawyk utrzymuje koszty w ryzach przy dużej skali: żądaj tylko tego, czego potrzebujesz. Strony repozytoriów są lekkie, ale jeśli rozprzestrzeniasz się na tysiące repozytoriów, blokuj zasoby i ponownie używaj połączeń - nasze notatki na temat obniżania kosztów przepustowości proxy mają zastosowanie nawet do taniego celu, ponieważ zysk się kumuluje.

Często zadawane pytania
Jaki jest limit szybkości API GitHub?
Nieautoryzowane żądania REST są ograniczone do 60 na godzinę, liczone na adres IP. Uwierzytelniony token podnosi to do 5,000 na godzinę. API wyszukiwania jest oddzielne i bardziej restrykcyjne - 30 żądań na minutę uwierzytelnionych, 10 nieautoryzowanych. Ponieważ limit nieautoryzowany jest na IP, rozłożenie odczytów na pulę proxy jest skutecznym sposobem na skalowanie zbierania.
Czy mogę scrapować dane z GitHub, których API nie ujawnia?
Tak. Graf zależności ("Używane przez"), strony trendów, listy tematów i linie czasu gwiazdek są tylko w HTML lub mocno ograniczone przez API. To zwykłe strony renderowane po stronie serwera, więc żądanie i parsowanie z BeautifulSoup działa bez przeglądarki. Kieruj przez proxy z centrów danych i rozłóż odczyty, aby pozostać poniżej dodatkowych limitów szybkości.
Czy potrzebuję proxy rezydencyjnych dla GitHub?
Zwykle nie. Publiczne strony GitHub są łagodne i renderowane po stronie serwera bez agresywnych wyzwań JavaScript, więc tanie proxy z centrów danych radzą sobie z nimi dobrze - celem jest rozłożenie żądań na IP, a nie maskowanie ich jako gospodarstw domowych. Jeśli cel odpowiada przez IPv6, pule IPv6 są jeszcze tańsze. Zarezerwuj IP rezydencyjne dla naprawdę wrogich celów.
Czy powinienem używać git clone czy scrapować strony plików?
Klonuj dla zawartości plików. Uruchomienie git clone i przetwarzanie repozytorium lokalnie jest szybsze, łagodniejsze dla GitHub i całkowicie unika limitów szybkości na plik. Zarezerwuj scrapowanie HTML i API dla metadanych i sygnałów - gwiazdek, zależności, trendów, współtwórców - których nie możesz uzyskać z samych plików po ich sprawdzeniu.
GitHub nagradza warstwowe podejście: API tam, gdzie jest hojny, git clone dla plików i scrapowanie HTML dla sygnałów adopcji, które ukrywa - wszystko rozłożone na tanie IP, aby żaden pojedynczy adres nie osiągnął limitu 60 na godzinę. Przetestuj IPv6, oprzyj się na pulach z centrów danych, a cała platforma staje się żywym zbiorem danych ekosystemu deweloperskiego.