Парсер тем GitHub
Праджвал Суле
Следовать
Стать человеком: журнал об искусственном интеллекте
--
Слушать
Делиться
Веб-скрапинг — это метод, используемый для извлечения данных с веб-сайтов. Это позволяет нам собирать информацию с веб-страниц и использовать ее для различных целей, таких как анализ данных, исследования или создание приложений.
В этой статье мы рассмотрим проект 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, содержащего описания тем на веб-странице.
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>
