Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでGitHubの月間スター数トップ10リポジトリを取得する方法

Gitは世界で最も人気のあるバージョン管理システムであり、何百万人もの開発者が日々プロジェクトやコードを管理しています。この記事では、Pythonを使って過去1か月間に最も多くスターを獲得したGitHubリポジトリのトップ10を自動的に取得する方法を解説します。

GitHubのページからデータを抽出するため、以下の2つのライブラリを使用します。

  • Requests:WebページへHTTPリクエストを送信し、HTMLを取得する
  • BeautifulSoup:取得したHTMLを解析し、目的の要素を抜き出す

取得した結果はテキストファイルに保存し、順位(スター数)・ユーザー名・リポジトリ名の一覧として表示します。

事前準備:ライブラリのインストール

まず、必要なライブラリをインストールしておきましょう。

pip install requests beautifulsoup4 lxml

実装コード

import requests
from bs4 import BeautifulSoup

# 月間トレンドのLuaリポジトリ一覧を取得
r = requests.get('https://github.com/trending/lua?since=monthly')
bs = BeautifulSoup(r.text, 'lxml')

# リポジトリ一覧の要素を抽出
lista_repo = bs.find_all('ol', class_='repo-list')

# 一旦HTML断片をファイルに書き出す
f1 = open('starred-repos.txt', 'w')
for lr in lista_repo:
    aux = lr.find_all('div', class_='d-inline-block col-9 mb-1')
    for ld in aux:
        rank = ld.find_all('a')
        f1.writelines(str(rank))
        f1.writelines('\n')
f1.close()

# ファイルからリポジトリURL(owner/repo)だけを取り出す
f1 = open('starred-repos.txt', 'r')
texto = []
for x in f1:
    if x[0] == '[' and x[1] == '<' and x[2] == 'a':
        na = x.split('"')
        texto.append(na[1])
f1.close()

# 順位付きの結果表を作成して保存
f1 = open('starred-repos.txt', 'w')
f1.writelines('{}\t {}\t\t {}\t\n\n'.format('Position ', 'Name ', 'Repositories '))
for i in range(10):
    tex = texto[i].split('/')
    name = tex[1]   # ユーザー名
    repos = tex[2]  # リポジトリ名
    f1.writelines('{}- \t {}\t\t {}'.format(i + 1, name, repos))
    f1.writelines('\n')
f1.close()

# 結果を表示
f1 = open('starred-repos.txt', 'r')
print(f1.read())
f1.close()

コードのポイント

  1. トレンドページへのアクセス:URLの ?since=monthly パラメータにより、「月間」のトレンドランキングを取得できます。dailyweekly に変更すれば期間を切り替えられます。
  2. HTMLの解析repo-list クラスを持つ要素から、各リポジトリへのリンク(ユーザー名/リポジトリ名)を抽出します。
  3. 整形と保存:「/」で区切ってユーザー名とリポジトリ名に分け、順位を付けてテキストファイルに書き出します。

実行結果の出力例

Position             Name              Repositories

1-               skywind3000               z.lua
2-                   Kong                  kong
3-                  Gawen                 WireHub
4-               PapyElGringo          material-awesome
5-                 koreader              koreader
6-                 stijnwop           guidanceSteering
7-                Courseplay            courseplay
8-                  Tencent              LuaPanda
9-                   ntop                ntopng
10-                awesomeWM              awesome

注意点

GitHubのHTML構造は定期的に更新されるため、上記のCSSセレクタ(クラス名)がそのまま使えない場合があります。その際は、ブラウザの開発者ツールで実際のHTML構造を確認し、find_all() の引数を適宜修正してください。また、頻繁にスクレイピングを行うとアクセス制限を受ける可能性があるため、実行間隔には十分注意しましょう。

  1. PythonのNews APIでトップニュースを取得する方法【サンプルコード付き】

    News APIは、世界中のニュースサイトから記事を検索・取得できる非常に有名なAPIです。このAPIを利用すれば、任意のニュースサイトから最新のトップニュースの見出しを簡単に取得できます。 ただし、News APIを使うにはAPIキーが必要です。APIキーはNews API公式サイトで無料登録すると発行できますので、事前に取得しておきましょう。 サンプルコード:BBCのトップニュースを取得する 以下は、Pythonのrequestsライブラリを使って、BBC Newsのトップニュースの見出しを番号付きで表示するサンプルコードです。 import requests def top_new

  2. PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法

    はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c