Bagaimana cara mengikis repositori GitHub publik menggunakan Python?

Komentar: 0

Pada artikel ini, kita akan membahas cara mengikis repositori GitHub menggunakan Python. Kami akan mengulas library terkenal seperti BeautifulSoup dan Requests dan memberikan penjelasan mendetail sambil membuat skrip scraping GitHub agar Anda dapat mengikutinya dengan mudah.

Mengapa melakukan scraping pada repositori GitHub?

Apa itu pengikisan Github dan untuk apa? Ada banyak tujuan untuk menggunakannya, tetapi yang paling sering termasuk:

  • Untuk memantau kemajuan teknologi. Memantau bintang dan repositori adalah cara yang bagus untuk melacak tren bahasa pemrograman, kerangka kerja, dan pustaka. Informasi ini bisa menjadi sangat penting dalam membuat keputusan yang berkaitan dengan implementasi teknologi, pengembangan keterampilan, atau alokasi sumber daya.
  • Memanfaatkan repositori pemrograman. Sejumlah besar proyek, contoh, dan solusi sumber terbuka dapat ditemukan di GitHub. Oleh karena itu, sejumlah besar pengetahuan dan teknik pemrograman yang berguna untuk tujuan pendidikan, meningkatkan keterampilan pemrograman, dan pemahaman tentang implementasi teknologi sudah tersedia di platform ini.

GitHub tidak hanya menawarkan hosting untuk repositori, tetapi mereka memiliki basis pengguna yang sangat besar, dan reputasi yang hebat menjadikannya pilihan yang dapat diandalkan.

Informasi yang tersimpan di GitHub berguna untuk melacak pola perkembangan teknologi serta meningkatkan pengembangan perangkat lunak. Informasi ini sangat penting untuk bersaing dengan kompetitor di dunia teknologi informasi.

Pustaka dan Alat Penting untuk Mengikis GitHub

Dalam hal scraping halaman web, bahasa yang paling mudah digunakan adalah Python, karena pustaka dan modulnya sangat banyak. Untuk melakukan scraping Python di Github, modul-modul berikut ini harus ditambahkan:

  • requests: lib klien yang menampung permintaan dan jawaban HTTP, dan yang paling sering digunakan.
  • BeautifulSoup: canggih dalam hal mengekstraksi detail dari HTML karena dilengkapi dengan fitur-fitur canggih dalam hal menavigasi dan mengambil data.
  • Selenium: meluncurkan peramban sungguhan dan memungkinkan untuk mengklik dan mengetik elemen-elemen halaman.

Hal ini dapat dilakukan dengan sangat mudah dengan menggunakan alat pengikisan Github. Namun, mari kita bahas lebih lanjut tentang cara melakukannya.

Membuat Skrip Repositori GitHub Scraping dengan Sup Cantik

Bagian ini akan menunjukkan cara mengikis repositori Github. Langkah-langkah penting dalam membuat pengikis terdiri dari:

  1. Membuat basis set - yang memerlukan pengunduhan Python dan pustaka yang relevan.
  2. Penyimpanan kode HTML halaman GitHub.
  3. Memeriksa tata letak halaman untuk mengidentifikasi item yang diperlukan.
  4. Mengumpulkan informasi yang meliputi antara lain nama akun, deskripsi, dan jumlah bintang yang didapat.
  5. Penyimpanan data ke jenis sistem file.

Mulai sekarang, kami akan membagikan detail untuk semua langkah ini bersama dengan skrip Github scraping yang sudah jadi.

Langkah 1: Menyiapkan Lingkungan Proyek Python Anda

Pastikan Anda memiliki Python di komputer Anda. Selanjutnya, buatlah lingkungan virtual Python baru untuk memulai proses scraping Github.


python -m venv github_scraper
source github_scraper/bin/activate  # Untuk MacOS dan Linux
github_scraper\Scripts\activate     # Untuk windows

Langkah 2: Menginstal Pustaka Python yang Diperlukan

Seperti yang kami katakan sebelumnya, BeautifulSoup dan Requests akan membantu untuk mengikis repositori GitHub. Di lingkungan virtual yang sedang diaktifkan, jalankan perintah ini untuk memasukkannya ke dalam dependensi proyek Anda:


pip install beautifulsoup4 requests

Langkah 3: Mengakses dan Mengunduh Halaman GitHub Target

Pilih repositori mana saja yang ingin Anda gunakan untuk melakukan scraping Github. Pertama, tentukan tautan dalam sebuah variabel, lalu buat permintaan HTTP yang akan mendapatkan kode halaman.


url = "https://github.com/TheKevJames/coveralls-python"
response = requests.get(url)

Langkah 4: Memahami dan Mengurai Struktur HTML

Untuk menganalisis HTML Anda, Anda memasukkannya ke dalam BeautifulSoup.


soup = BeautifulSoup(page.text, 'html.parser')

Konstruktor BeautifulSoup() perlu disediakan dengan dua hal.

  1. String yang berisi konten HTML, disimpan dalam variabel page.text.
  2. Parser yang akan digunakan oleh Beautiful Soup: "html.parser" adalah nama pemilah HTML Python bawaan.

HTML akan diuraikan oleh BeautifulSoup dan sebuah struktur pohon akan dihasilkan. Lebih khusus lagi, variabel sup berisi semua metode yang diperlukan untuk memilih elemen yang relevan dari pohon DOM seperti:

  • find(): mengembalikan elemen HTML pertama yang sesuai dengan strategi pemilih yang disediakan.
  • find_all(): mengembalikan daftar elemen HTML yang cocok dengan strategi pemilih input.
  • select_one (): mengembalikan elemen HTML pertama yang cocok dengan pemilih CSS masukan.
  • select(): mengembalikan daftar elemen HTML yang sesuai dengan pemilih CSS yang disediakan.

Langkah 5: Menganalisis Halaman Target untuk Data yang Relevan

Inilah langkah penting lainnya: memilih elemen HTML sederhana dan mengambil data Github dari elemen tersebut. Langkah ini mendahului penulisan skrip repositori Python Github.

Sebelum melakukan scraping di Github, biasakan diri Anda dengan halaman web itu sendiri. Setelah itu, buka alat pengembang dengan mengklik F12. Setelah Anda membuka kode, Anda akan melihat bahwa banyak elemen pada halaman tersebut tidak memiliki kelas atau atribut unik yang akan memudahkan Anda untuk menavigasi ke elemen yang sesuai. Telusuri halaman tersebut dan bersiaplah untuk mengekstrak data.

Langkah 6: Mengekstrak Detail Repositori

Sekarang kita siap untuk membuat skrip Python yang akan membantu kita untuk melakukan scraping pada repositori GitHub. Skrip ini dapat mengekstrak informasi berguna yang tersimpan di GitHub seperti bintang, deskripsi, komit terakhir, dll. Untuk itu, kita perlu menentukan fitur-fitur yang diperlukan dan mengambil nilai teks yang sesuai.

  • Nama repositori:
    
    repo_title = soup.select_one('[itemprop="name"]').text.strip()
    

    Atribut itemprop="name" memiliki nilai atribut yang memiliki identitas unik, sehingga kita mengambilnya. Bidang teks di GitHub umumnya memiliki spasi dan karakter baris baru dan dapat dibersihkan dengan menggunakan strip().

  • Cabang saat ini:
    
    git_branch_icon_html_element = soup.select_one('[class="Box-sc-g0xbh4-0 ffLUq ref-selector-button-text-container"]').text.split()
    

    Perhatikan fakta bahwa tidak ada metode yang lebih sederhana untuk memilih komponen HTML yang memegang judul cabang utama. Apa yang dapat Anda lakukan? Pilih kelas yang unik dan dapatkan teksnya.

  • Komitmen terakhir:
    
    relative_time_html_element = soup.select_one('relative-time')
    latest_commit = relative_time_html_element['datetime']
    

    Kami mencatat bahwa tag waktu relatif, tempat komit terakhir oleh pengguna disimpan, sudah dipilih, dan tanggalnya dipilih melalui datetime.

Kumpulkan informasi yang ada di sisi kiri: deskripsi, bintang, pemandangan, garpu.

  • Deskripsi:
    
    bordergrid_html_element = soup.select_one('.BorderGrid')
    about_html_element = bordergrid_html_element.select_one('h2')
    description_html_element = about_html_element.find_next_sibling('p')
    description = description_html_element.get_text().strip()
    
  • Bintang:
    
    star_icon_html_element = bordergrid_html_element.select_one('.octicon-star')
    stars_html_element = star_icon_html_element.find_next_sibling('strong')
    stars = stars_html_element.get_text().strip().replace(',', '')
    
  • Tampilan:
    
    eye_icon_html_element = bordergrid_html_element.select_one('.octicon-eye')
    watchers_html_element = eye_icon_html_element.find_next_sibling('strong')
    watchers = watchers_html_element.get_text().strip().replace(',', '')
    
  • Garpu:
    
    fork_icon_html_element = bordergrid_html_element.select_one('.octicon-repo-forked')
    forks_html_element = fork_icon_html_element.find_next_sibling('strong')
    forks = forks_html_element.get_text().strip().replace(',', '')
    

Langkah 7: Mengumpulkan dan Menganalisis File Readme

Berkas readme sangat penting. File ini menyediakan deskripsi repositori dan instruksi tentang cara mengimplementasikan kode. Jika Anda memeriksa file readme.md, Anda dapat melihat tautan apa yang dimilikinya:


https://raw.githubusercontent.com///readme.md

Karena kita memiliki , kita dapat membuat URL secara terprogram menggunakan f-string, menggunakannya, dan membuat permintaan HTTP untuk mendapatkan kode file.


readme_url = f'https://github.com/TheKevJames/coveralls-python/blob/{main_branch}/readme.rst'
readme_page = requests.get(readme_url)

readme = None
if readme_page.status_code != 404:
    readme = readme_page.text

Ingatlah untuk memeriksa kesalahan 404 untuk menghindari penyimpanan konten halaman web GitHub 404 jika repositori tidak memiliki file readme.

Langkah 8: Mengatur dan Menyimpan Data yang Dikikis Secara Efisien

Semua informasi akan disimpan dalam satu kamus sehingga kita dapat dengan mudah menuliskannya ke dalam file JSON.


repo = {}
repo['name'] = repo_title
repo['latest_commit'] = latest_commit
repo['main_branch'] = main_branch
repo['description'] = description
repo['stars'] = stars
repo['watchers'] = watchers
repo['forks'] = forks
repo['readme'] = readme

Langkah 9: Mengekspor Data yang Dikikis dalam Format JSON

Kita akan memanfaatkan pustaka Python bawaan untuk menganalisis data dan menyimpannya dalam format JSON, karena ini sangat cocok untuk struktur bersarang seperti dalam kasus kita ketika artikel memiliki daftar.


with open('github_data.json', 'w', encoding='utf-8') as json_file:
  json.dump(repo, json_file, ensure_ascii=False, indent=4)

Langkah 10: Mengintegrasikan Semua Langkah Menjadi Naskah Lengkap


import json
import requests
from bs4 import BeautifulSoup

url = "https://github.com/TheKevJames/coveralls-python"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")

repo_title = soup.select_one('[itemprop="name"]').text.strip()

# cabang
main_branch = soup.select_one(
   '[class="Box-sc-g0xbh4-0 ffLUq ref-selector-button-text-container"]').text.split()

# komit terbaru
relative_time_html_element = soup.select_one('relative-time')
latest_commit = relative_time_html_element['datetime']

# keterangan
bordergrid_html_element = soup.select_one('.BorderGrid')
about_html_element = bordergrid_html_element.select_one('h2')
description_html_element = about_html_element.find_next_sibling('p')
description = description_html_element.get_text().strip()

# bintang
star_icon_html_element = bordergrid_html_element.select_one('.octicon-star')
stars_html_element = star_icon_html_element.find_next_sibling('strong')
stars = stars_html_element.get_text().strip().replace(',', '')

# pengamat
eye_icon_html_element = bordergrid_html_element.select_one('.octicon-eye')
watchers_html_element = eye_icon_html_element.find_next_sibling('strong')
watchers = watchers_html_element.get_text().strip().replace(',', '')

# garpu
fork_icon_html_element = bordergrid_html_element.select_one('.octicon-repo-forked')
forks_html_element = fork_icon_html_element.find_next_sibling('strong')
forks = forks_html_element.get_text().strip().replace(',', '')

# readme
readme_url = f'https://github.com/TheKevJames/coveralls-python/blob/{main_branch}/readme.rst'
readme_page = requests.get(readme_url)

readme = None
if readme_page.status_code != 404:
   readme = readme_page.text

repo = {}
repo['name'] = repo_title
repo['latest_commit'] = latest_commit
repo['main_branch'] = main_branch
repo['description'] = description
repo['stars'] = stars
repo['watchers'] = watchers
repo['forks'] = forks
repo['readme'] = readme

with open('github_data.json', 'w', encoding='utf-8') as json_file:
   json.dump(repo, json_file, ensure_ascii=False, indent=4)

Mengikis Github: Kesimpulan

Kita telah membahas proses pembuatan skrip scraping GitHub untuk repositori dengan bantuan BeautifulSoup dan Request. Anda sekarang tahu cara mengakses halaman web, mengambil data yang relevan, dan menyandikannya dengan cara yang ramah pengguna. Keterampilan tersebut akan berguna dalam menganalisis proyek-proyek terkenal, melacak perubahan pada kode, atau membuat laporan.

Meskipun demikian, berhati-hatilah dalam penggunaannya. Sebagian besar waktu, API tersedia untuk digunakan di GitHub, yang akan lebih sederhana dan lebih praktis untuk digunakan. Jika Anda membuat keputusan untuk melakukan scraping web, pastikan Anda mematuhi pedoman situs dan tidak membombardir server dengan terlalu banyak permintaan.

Komentar:

0 komentar