GitHub-gegevens scrapen voorbij de API-limiet: Sterren, Afhankelijke projecten
De API van GitHub beperkt niet-geauthenticeerde oproepen tot 60 per uur en verbergt afhankelijke projecten en trending volledig. Hier is hoe je de signalen die ertoe doen kunt verzamelen via goedkope IP's.
GitHub is een goudmijn voor onderzoek - adoptiecurves, concurrentiemomentum, afhankelijkheidsgrafieken, signalen voor aanwerving - en de officiële API geeft je daar een deel van gratis. Daarna stopt het. Niet-geauthenticeerde oproepen zijn beperkt tot 60 per uur, en de twee datasets die mensen het meest willen, de afhankelijke grafiek en de trendingpagina, zitten helemaal niet in de API. Deze gids behandelt hoe je GitHub-gegevens kunt scrapen voorbij die limieten: wat de API je geeft, wat je uit HTML moet lezen, en waarom GitHub een zeldzaam doelwit is waar goedkope datacenter- en IPv6-proxies het juiste hulpmiddel zijn.
Ken de limieten voordat je ze bestrijdt
Begin met de API - het is gestructureerd, goedgekeurd en goedkoop qua quotum als je authenticatie gebruikt. De cijfers die alles vormgeven: niet-geauthenticeerde REST-verzoeken zijn beperkt tot 60 per uur, geteld per IP; een geauthenticeerd token krijgt 5.000 per uur; de Search API is nog strikter met 30 verzoeken per minuut geauthenticeerd (10 niet-geauthenticeerd). Het belangrijkste detail is dat de niet-geauthenticeerde limiet wordt geteld per IP - wat precies de reden is waarom het routeren van lezingen over veel IP's je speelruimte vermenigvuldigt.
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"])
Gebruik de API voor alles wat het schoon blootlegt, en gebruik git clone voor bestandsinhoud - het klonen en lokaal verwerken van een repo is sneller en vriendelijker dan het scrapen van individuele bestandspagina's. HTML-scraping is voor de signalen die de API-limieten nutteloos maken of volledig weglaten.
Wat je uit HTML moet lezen
Drie datasets met hoge waarde leven alleen op de gerenderde pagina's. De afhankelijke grafiek - GitHub's "Gebruikt door"-telling en de lijst van repositories die afhankelijk zijn van een pakket - is een van de sterkste adoptie-metrics die er zijn, en het zit niet in de API. De trending pagina's (github.com/trending, filterbaar op taal en venster) zijn alleen HTML. En onderwerp pagina's brengen repositories naar voren op onderwerp veel nuttiger dan de zoekquotum toestaat. Alle drie zijn eenvoudige server-gerenderde HTML, dus een eenvoudige request-and-parse werkt - geen browser nodig.
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 is een datacenter (en misschien IPv6) doelwit
Hier is het deel dat mensen over-engineeren. GitHub's openbare pagina's zijn server-gerenderd, tolerant en bevatten geen agressieve JavaScript-uitdaging - dus je hebt geen premium residentiële IP's nodig om ze te lezen. Dit is een schoolvoorbeeld voor datacenter-proxies: goedkoop, snel en overvloedig, breed verspreid zodat geen enkel IP de niet-geauthenticeerde limiet benadert of een secundaire limiet overschrijdt. Residentieel hier gebruiken is luxe prijzen betalen voor een taak die een economische IP perfect uitvoert. Onze gids over wanneer datacenter-proxies de juiste keuze zijn legt precies dit soort tolerante, hoge-doorvoer doelwit uit.
Er is een nog goedkopere optie die het testen waard is: IPv6. Wanneer een doelwit antwoordt via IPv6, geven IPv6 proxy pools je een enorme, goedkope adresruimte - ideaal voor het verspreiden van per-IP-beperkte lezingen over duizenden exits. GitHub rolt IPv6-ondersteuning uit, dus het is een van de weinige grote doelwitten waar het de moeite waard is om te controleren in plaats van aan te nemen. Test het voordat je je vastlegt: voer het doelwit door onze gratis IPv6 compatibiliteitschecker, en lees de economie in onze complete IPv6 proxies gids.
Krijg snelle datacenter-proxies voor GitHub
Let op de secundaire limiet
De per-uur limieten zijn niet de enige beperking die je zult tegenkomen. GitHub voert ook misbruikdetectie uit die reageert op plotselinge, zeer gelijktijdige of verdacht regelmatige verkeerspatronen - dus zelfs als je comfortabel onder de numerieke limiet zit, kan hameren vanaf een enkel IP een tijdelijke blokkade opleveren. De verdedigingen zijn dezelfde die je een beleefde client maken: beperk gelijktijdigheid, voeg een beetje jitter toe tussen verzoeken, eer elke Retry-After header die de server je geeft, en verspreid de belasting zodat geen enkele exit ooit een ongecontroleerd patroon draagt. Dit is de echte reden waarom een brede pool belangrijk is - het is niet alleen de 60-per-uur rekenkunde, het is dat geen enkel IP ooit moet lijken op een script dat op hol is geslagen. Trek je terug bij de eerste 403 of vertraging in plaats van direct opnieuw te proberen in een langere ban.
Repo-gegevens omzetten in ontwikkeltool-intel
Het doel van dit alles is de analyselaag. Volg de sterrensnelheid en het aantal afhankelijke projecten van een concurrerende bibliotheek in de tijd en je kijkt naar adoptie in real time. Vergelijk de trendingpagina's per taal week na week om opkomende tools te spotten voordat ze duidelijk zijn. Haal bijdragerslijsten op om teamgrootte en aanwervingssignalen te lezen. Combineer taalverdelingen over een onderwerp om een heel ecosysteem in kaart te brengen. Maak snapshots van repositories op schema, sla elke opname op met een tijdstempel, en de verschillen worden het product - momentum, niet een enkel getal. Een eenmalige lezing van 40.000 sterren is trivia; dezelfde repository die 2.000 sterren per week toevoegt terwijl het aantal afhankelijke projecten stijgt, is een echt adoptiesignaal waar je op kunt reageren voordat de bredere markt het opmerkt.
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'
Eén gewoonte houdt de kosten beheersbaar bij volume: vraag alleen aan wat je nodig hebt. Repo-pagina's zijn lichtgewicht, maar als je uitwaaiert naar duizenden repositories, blokkeer dan assets en hergebruik verbindingen - onze notities over het verminderen van proxybandbreedtekosten zijn zelfs van toepassing op een goedkoop doelwit, omdat de winst zich vermenigvuldigt.

Veelgestelde vragen
Wat is de API-limiet van GitHub?
Niet-geauthenticeerde REST-verzoeken zijn beperkt tot 60 per uur, geteld per IP-adres. Een geauthenticeerd token verhoogt dat tot 5.000 per uur. De Search API is apart en strikter - 30 verzoeken per minuut geauthenticeerd, 10 niet-geauthenticeerd. Omdat de niet-geauthenticeerde limiet per IP is, is het verspreiden van lezingen over een proxy-pool een effectieve manier om de verzameling te schalen.
Kan ik GitHub-gegevens scrapen die de API niet blootlegt?
Ja. De afhankelijke grafiek ("Gebruikt door"), de trendingpagina's, onderwerpenlijsten en sterrentijdlijnen zijn alleen HTML of zwaar quotumbeperkt via de API. Het zijn eenvoudige server-gerenderde pagina's, dus een request-and-parse met BeautifulSoup werkt zonder een browser. Routeer via datacenter-proxies en verspreid de lezingen om onder secundaire limieten te blijven.
Heb ik residentiële proxies nodig voor GitHub?
Meestal niet. GitHub's openbare pagina's zijn tolerant en server-gerenderd zonder agressieve JavaScript-uitdaging, dus goedkope datacenter-proxies kunnen ze goed aan - het doel is het verspreiden van verzoeken over IP's, niet het vermommen ervan als huishoudens. Als het doelwit antwoordt via IPv6, zijn IPv6-pools nog goedkoper. Bewaar residentiële IP's voor echt vijandige doelwitten.
Moet ik git clone gebruiken of bestandspagina's scrapen?
Clone voor bestandsinhoud. Het uitvoeren van git clone en het lokaal verwerken van de repository is sneller, vriendelijker voor GitHub, en vermijdt per-bestandslimieten volledig. Bewaar HTML-scraping en de API voor metadata en signalen - sterren, afhankelijke projecten, trending, bijdragers - die je niet kunt krijgen uit de uitgecheckte bestanden zelf.
GitHub beloont een gelaagde aanpak: API waar het genereus is, git clone voor bestanden, en HTML-scraping voor de adoptiesignalen die het verbergt - allemaal verspreid over goedkope IP's zodat geen enkel adres de 60-per-uur muur raakt. Test voor IPv6, leun op datacenter-pools, en het hele platform wordt een live ontwikkel-ecosysteem dataset.