Получите информацию о складах GitHub — получите информацию о популярных хранилищах и их вкладчиках.

Оглавление

1. Выберите целевую страницу GitHub

2. Проанализируйте структуру сайта

3. Подготовьте инструменты и библиотеки

4. Напишите программу-краулер

5. Сохраните полученные данные

эпилог


В этом блоге мы рассмотрим, как написать на Python сканер, который извлекает информацию о популярных репозиториях и их вкладчиках с GitHub. Мы пройдем следующие шаги по порядку:

  1. Выберите целевую страницу GitHub
  2. Анализировать структуру сайта
  3. Подготовка инструментов и библиотек
  4. Написать сканер
  5. Сохраните полученные данные

Прежде чем приступить к написанию программы-краулера, убедитесь, что вы соблюдаете условия использования веб-сайта и используете технологию сканера в рамках соблюдения законодательства.

1. Выберите целевую страницу GitHub

Во-первых, нам нужно выбрать страницу GitHub для парсинга. Здесь мы берем страницу GitHub Trending в качестве примера, чтобы получить информацию о популярных репозиториях и их вкладчиках.

2. Проанализируйте структуру сайта

Далее нам необходимо проанализировать структуру целевого веб-сайта, чтобы понять, как получить необходимые данные. Вы можете использовать инструменты разработчика своего браузера (например, функцию Chrome «Проверка») для просмотра исходного кода веб-страницы или просмотра исходного кода веб-страницы напрямую.

Проанализировав структуру страницы GitHub Trending, мы обнаружили, что информация о популярном репозитории содержится в теге <h1>, который имеет h3 lh-condensedкласс. Из этих тегов мы можем <h1>извлечь информацию о популярных репозиториях. Информация об участниках для каждого репозитория содержится в <a>теге с d-inline-blockклассом.

3. Подготовьте инструменты и библиотеки

Прежде чем писать программу-краулер, нам нужно установить необходимые библиотеки. В этом примере мы будем использовать BeautifulSoup и библиотеку Requests. Запустите следующие команды в командной строке, чтобы установить эти библиотеки:

pip install beautifulsoup4
pip install requests

Далее мы импортируем эти библиотеки и подготовимся к написанию нашего сканера.

4. Напишите программу-краулер

Сначала создайте github_scraper.pyновый файл с именем . Это будет код нашего сканера.

Сначала импортируйте необходимые библиотеки.

import requests
from bs4 import BeautifulSoup

Далее нам нужно определить функцию для получения HTML-контента целевого веб-сайта.

def get_html(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    return None

Затем нам нужно написать функцию, которая анализирует содержимое HTML и извлекает необходимую информацию.

def parse_trending_repositories(html):
    soup = BeautifulSoup(html, 'html.parser')
    repos = soup.find_all('h1', class_='h3 lh-condensed')

    parsed_repos = []
    for repo in repos:
        repo_name = repo.get_text(strip=True)
        repo_url = 'https://github.com' + repo.find('a')['href']

        parsed_repos.append({
            'repo_name': repo_name,
            'repo_url': repo_url,
        })

    return parsed_repos

Далее мы напишем функцию для получения информации об участниках репозитория.

def get_contributors(repo_url):
    html = get_html(repo_url)

    if html:
        soup = BeautifulSoup(html, 'html.parser')
        contributors = soup.find_all('a', class_='d-inline-block')

        parsed_contributors = []
        for contributor in contributors:
            parsed_contributors.append({
                'contributor_name': contributor['aria-label'],
                'contributor_profile': contributor['href'],
            })

        return parsed_contributors
    else:
        return None

Наконец, нам нужно написать основную функцию, которая запускает сканер и сохраняет результаты.

def main():
    url = 'https://github.com/trending'
    html = get_html(url)

    if html:
        trending_repositories = parse_trending_repositories(html)

        for repo in trending_repositories:
            repo['contributors'] = get_contributors(repo['repo_url'])

        # 保存结果        with open('trending_repos.json', 'w') as f:
            import json
            json.dump(trending_repositories, f, indent=2)

        print("爬取完成,结果已保存到trending_repos.json文件中。")
    else:
        print("获取网页内容失败,请检查URL是否正确。")

if __name__ == '__main__':
    main()

5. Сохраните полученные данные

В приведенном выше коде мы сохранили просканированные популярные репозитории и информацию об их вкладчиках в формате JSON в trending_repos.jsonфайл с именем . Вы можете проверить этот файл, чтобы подтвердить результат.

эпилог

В этом сообщении блога мы подробно описали, как написать на Python сканер для получения популярных репозиториев и их участников с GitHub. Конечно, это всего лишь простой пример. Вы можете изменить код в соответствии со своими потребностями, чтобы получить информацию с других страниц GitHub, или дополнительно оптимизировать код, чтобы повысить эффективность и скорость работы сканера. Обратите внимание, что при использовании методов парсинга всегда соблюдайте условия использования сайта и следите за тем, чтобы ваши действия соответствовали закону.

Guess you like

Origin blog.csdn.net/m0_68036862/article/details/130912971