banner
Центр новостей
Обеспечивается безупречный сервис

Парсер тем GitHub

May 16, 2023

Праджвал Суле

Следовать

Стать человеком: журнал об искусственном интеллекте

--

Слушать

Делиться

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

В этой статье мы рассмотрим проект Python под названием «GitHub Topics Scraper», который использует очистку веб-страниц для извлечения информации со страницы тем GitHub и получения имен репозиториев и сведений для каждой темы.

GitHub — широко популярная платформа для размещения репозиториев кода и совместной работы над ними. Он предлагает функцию под названием «темы», которая позволяет пользователям классифицировать репозитории по конкретным темам или темам. Проект GitHub Topics Scraper автоматизирует процесс очистки этих тем и получения соответствующей информации из репозитория.

Парсер GitHub Topics реализован с использованием Python и использует следующие библиотеки:

Давайте углубимся в код и поймем, как работает каждый компонент проекта.

Приведенный выше фрагмент кода импортирует три библиотеки: запросы, BeautifulSoup и pandas.

Определяет функцию theme_page_authentication, которая принимает URL-адрес в качестве аргумента.

Вот разбивка того, что делает код:

1. groups_url = URL: эта строка присваивает предоставленный URL-адрес переменной groups_url. . Этот URL-адрес представляет веб-страницу, которую мы хотим аутентифицировать и получить ее содержимое.

2. ответ = Requests.get(topics_url): Эта строка использует request.get().функция для отправки HTTP-запроса GET на URL-адрес темыи сохраняет ответ в ответе переменная. Этот запрос используется для получения HTML-содержимого веб-страницы.

3. page_content = ответ.текст: эта строка извлекает содержимое HTML из объекта ответа и присваивает его свойству page_content. переменная. Ответ.текстАтрибут извлекает текстовое содержимое ответа.

4. doc = BeautifulSoup(page_content, 'html.parser'): эта строка создает объект BeautifulSoup с именем doc.путем анализа page_contentиспользуя «html.parser» парсер. Это позволяет нам перемещаться и извлекать информацию из HTML-структуры веб-страницы.

5. вернуть документ: Эта строка возвращает документ объекта BeautifulSoup. из функции. Это означает, что когда параметр theme_page_authenticationвызывается функция, она вернет проанализированное содержимое HTML как объект BeautifulSoup.

Целью этой функции является проверка подлинности и получение HTML-содержимого веб-страницы, указанной по предоставленному URL-адресу. Он использует запросыБиблиотека для отправки HTTP-запроса GET извлекает содержимое ответа, а затем анализирует его с помощью BeautifulSoup для создания навигационного объекта, представляющего структуру HTML.

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

Определяет функцию под названием subjectScraper.который принимает объект BeautifulSoup (документ) в качестве аргумента.

Вот разбивка того, что делает код:

1. title_class = 'f3 lh-сжатый mb-0 mt-1 Link--primary': Эта строка определяет имя класса CSS (title_class) для элемента HTML, содержащего заголовки тем на веб-странице.

2. theme_title_tags = doc.find_all('p', {'class':title_class}): Эта строка использует find_all().метода объекта BeautifulSoup для поиска всех элементов HTML (

) с указанным классом CSS (title_class ). Он получает список объектов BeautifulSoup Tag, представляющих теги заголовков тем.

3.description_class = 'f5 color-fg-muted mb-0 mt-1': эта строка определяет имя класса CSS (description_class) для элемента HTML, содержащего описания тем на веб-странице.

/strong) with the specified CSS class (description_class/strong). It retrieves a list of BeautifulSoup Tag objects representing the topic description tags./p>/strong) with the specified CSS class (link_class/strong). It retrieves a list of BeautifulSoup Tag objects representing the topic link tags./p>/strong) within it. It retrieves a list of BeautifulSoup Tag objects representing the anchor tags./p>/strong) with the specified CSS class (h3_class/strong). It retrieves a list of BeautifulSoup Tag objects representing the repository name tags./p>/strong) with the specified CSS class (star_class/strong). It retrieves a list of BeautifulSoup Tag objects representing the star count tags./p>> https://github.com/PrajjwalSule21/GitHub-Topic-Scraper/blob/main/RepoScraper.py/p> title_class description_class = 'f5 color-fg-muted mb-0 mt-1' description_class topic_desc_tags = doc.find_all('p', {'class':description_class}) find_all()

description_class link_class = 'no-underline flex-1 d-flex flex-column' link_class topic_link_tags = doc.find_all('a',{'class':link_class}) find_all() link_class topic_titles = [] for tag in topic_title_tags: ... topic_title_tags topic_titles topic_description = [] for tag in topic_desc_tags: ... topic_desc_tags topic_description topic_urls = [] base_url = "https://github.com" for tags in topic_link_tags: ... topic_link_tags topic_urls topics_dict = {...} topics_dict topics_df = pd.DataFrame(topics_dict) topics_dict return topics_df doc topic_url_extractor dataframe url_lst = [] url_lst for i in range(len(dataframe)): ... topic_url = dataframe['URL'][i] i url_lst.append(topic_url) url_lst return url_lst url_lst parse_star_count stars_str stars_str = stars_str.strip()[6:] stars_str strip() stars_str if stars_str[-1] == 'k': ... stars_str stars_str = float(stars_str[:-1]) * 1000 return int(stars_str) stars_str get_repo_info h3_tags star_tag base_url = 'https://github.com' a_tags = h3_tags.find_all('a') find_all() h3_tags username = a_tags[0].text.strip() a_tags[0] username strip() repo_name = a_tags[1].text.strip() a_tags[1] repo_name strip() repo_url = base_url + a_tags[1]['href'] a_tags[1] base_url repo_url stars = parse_star_count(star_tag.text.strip()) star_tag parse_star_count stars return username, repo_name, stars, repo_url username repo_name stars repo_url h3_tags star_tag topic_information_scraper topic_url topic_doc = topic_page_authentication(topic_url) topic_page_authentication topic_url topic_doc h3_class = 'f3 color-fg-muted text-normal lh-condensed' h3_class repo_tags = topic_doc.find_all('h3', {'class':h3_class}) find_all() topic_doc

h3_class star_class = 'tooltipped tooltipped-s btn-sm btn BtnGroup-item color-bg-default' star_class star_tags = topic_doc.find_all('a',{'class':star_class}) find_all() star_class topic_repos_dict = {...} topic_repos_dict for i in range(len(repo_tags)): ... repo_tags star_tags repo_info = get_repo_info(repo_tags[i], star_tags[i]) get_repo_info repo_tags[i] star_tags[i] repo_info topic_repos_dict['username'].append(repo_info[0]) repo_info topic_repos_dict topic_repos_dict['repo_name'].append(repo_info[1]) repo_info topic_repos_dict topic_repos_dict['stars'].append(repo_info[2]) repo_info topic_repos_dict topic_repos_dict['repo_url'].append(repo_info[3]) repo_info topic_repos_dict return pd.DataFrame(topic_repos_dict) topic_repos_dict get_repo_info if __name__ == "__main__": url = 'https://github.com/topics' topic_dataframe = topicSraper(topic_page_authentication(url)) topic_page_authentication doc topicSraper topic_dataframe topic_dataframe.to_csv('GitHubtopics.csv', index=None) topic_dataframe index=None url = topic_url_extractor(topic_dataframe) topic_url_extractor topic_dataframe url name = topic_dataframe['Title'] topic_dataframe name for i in range(len(topic_dataframe)): ... topic_dataframe new_df = topic_information_scraper(url[i]) topic_information_scraper url[i] new_df new_df.to_csv(f'GitHubTopic_CSV-Files/{name[i]}.csv', index=None) new_df name[i] index=None/strong>