【问题标题】:How to use GitHub API to get a repository's dependents information in GitHub?如何使用 GitHub API 在 GitHub 中获取存储库的依赖信息?
【发布时间】:2020-03-03 04:11:45
【问题描述】:
当我使用 GitHub API v4 获取一些信息时,我可以通过使用 repository.dependencyGraphManifests 轻松获取依赖项。但是我找不到任何方法来使用 GitHub API v4 来获取家属信息,尽管我可以在 Insights->Dependency Graph->Dependents 中看到它。
我想知道是否有任何可能的方式来获取 GitHub 存储库中的家属信息?无论是 GitHub API 还是其他。
【问题讨论】:
标签:
github
graphql
github-api
【解决方案1】:
根据 Bertrand Martel 的回答 (@bertrand-martel),不要忘记添加以下代码,以免您卡在第一页和第二页之间。换句话说,它会向前,然后向后;因为最初只有一个<a>标签,而下一页有两个,所以它选择第一个(“上一页”)并返回上一页。
代码:
...
paginationContainer = soup.find("div", {"class":"paginate-container"}).find_all('a')
if len(paginationContainer) > 1:
paginationContainer = paginationContainer[1]
else:
paginationContainer = paginationContainer[0]
...
【解决方案2】:
我认为您无法使用 Github API(Rest 或 Graphql)获取依赖项目,一种方法可能是使用像以下 python 脚本一样的抓取:
import requests
from bs4 import BeautifulSoup
repo = "expressjs/express"
page_num = 3
url = 'https://github.com/{}/network/dependents'.format(repo)
for i in range(page_num):
print("GET " + url)
r = requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
data = [
"{}/{}".format(
t.find('a', {"data-repository-hovercards-enabled":""}).text,
t.find('a', {"data-hovercard-type":"repository"}).text
)
for t in soup.findAll("div", {"class": "Box-row"})
]
print(data)
print(len(data))
paginationContainer = soup.find("div", {"class":"paginate-container"}).find('a')
if paginationContainer:
url = paginationContainer["href"]
else:
break
Try this python script