CoderCastrov logo
CoderCastrov
Парсер

Парсинг рейтингов университетов с использованием Python, Selenium и BeautifulSoup

Парсинг рейтингов университетов с использованием Python, Selenium и BeautifulSoup
просмотров
5 мин чтение
#Парсер

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

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

Мы используем библиотеку Selenium для автоматизации процесса открытия веб-браузера и навигации на конкретный динамический веб-сайт - в данном случае, рейтинговый веб-сайт Times Higher Education для университетов по всему миру в 2023 году.

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(ChromeDriverManager().install())

Мы импортируем модуль webdriver из библиотеки Selenium, который позволяет нам управлять веб-браузером с помощью кода Python. Затем добавляем класс ChromeDriverManager из библиотеки webdriver_manager, который используется для автоматической загрузки и установки соответствующей версии исполняемого файла ChromeDriver, необходимого для управления браузером Chrome.


driver.get("https://www.timeshighereducation.com/world-university-rankings/2023/world-ranking")
select=driver.find_element(by=By.NAME,value='datatable-1_length')
select.send_keys("Все").

Затем мы создаем экземпляр Chrome webdriver и используем метод get для перехода по указанному URL. Затем мы используем метод find_element для нахождения элемента HTML на странице по его атрибуту name. В данном случае элементом является элемент select, который позволяет пользователю выбрать количество результатов, отображаемых на странице. Мы используем метод send_keys для выбора опции "Все", которая отобразит все университеты в рейтинге.

существует несколько способов нахождения и выбора элементов на веб-странице с использованием Selenium. Один из наиболее распространенных методов - использовать метод find_element и указать метод нахождения элемента в качестве параметра. Например:

driver.find_element(By.XPATH, "//div[@class='example']")
driver.find_element(By.ID, "example-id")
driver.find_element(By.CLASS_NAME, "example-class")

Класс By используется для указания метода нахождения элемента, и второй аргумент - это значение, используемое для нахождения элемента. В первом примере элемент находится с использованием его XPATH, который является языком для навигации по XML-документу, такому как HTML-документ. Второй пример находит элемент по его атрибуту ID, а третий пример находит элемент по его атрибуту class.

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

select=driver.find_element(by=By.CLASS_NAME,value='chosen-single')
    select.send_keys(category,Keys.RETURN)

Чтобы использовать выпадающие меню в скрипте Python, обычно вы пытаетесь найти элемент на странице и взаимодействовать с ним. Например, вы можете использовать метод find_element для нахождения выпадающего меню по его атрибуту id или name, а затем использовать метод click для открытия меню. Затем вы можете использовать метод send_keys для выбора определенной опции из меню, или использовать методы select_by_index или select_by_value, если вы знаете индекс или значение опции, которую хотите выбрать.

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

from bs4 import BeautifulSoup
soup = BeautifulSoup(page_source, 'lxml')
table1 = soup.find('table', id='datatable-1')

После загрузки веб-страницы и выбора необходимых опций мы используем атрибут page_source для получения HTML-кода страницы. Затем мы используем библиотеку BeautifulSoup для разбора этого исходного кода и создания объекта BeautifulSoup, который мы можем использовать для извлечения данных из страницы.

Мы используем метод find для нахождения элемента таблицы с атрибутом id равным datatable-1, который содержит информацию о рейтинге университетов. Затем мы используем метод find_all для получения всех элементов tr (строк таблицы) в таблице, представляющих данные строк для каждого университета.

import pandas as pd
# Создаем цикл for для заполнения mydata
unis=pd.DataFrame(columns=["Ранг","Название","r1","r2","r3","f4"])
for j in table1.find_all('tr')[1:]:
    row_info = j.find_all('td')
    row = [i.text for i in row_info]
    length = len(mydata)
    unis.loc[length] = row
unis

Затем мы импортируем библиотеку pandas и создаем пустой pandas DataFrame с колонками для ранга, названия и различных показателей рейтинга. Затем мы используем цикл for для итерации по каждому элементу tr в таблице, извлекаем данные из элементов td (ячейки таблицы) и добавляем эти данные в DataFrame в качестве новой строки.

Наконец, у нас есть DataFrame, содержащий информацию о рейтинге всех университетов в рейтинге Times Higher Education 2023 года. Эти данные могут быть использованы для дальнейшего анализа или манипуляций по мере необходимости.

Бонусный контент: Поиск лучших результатов Google для нужных вам курсов!

def get_top_results(input):    
    params = {
      'q' :  input,
      'gl': 'uk',
      'hl': 'en',
    }
    dic={}
    html = requests.get('https://www.google.com/search', headers=headers, params=params)
    soup = BeautifulSoup(html.text, 'lxml')

    for result in soup.select('.tF2Cxc'):
        heading = result.select_one('.DKV0Md').text
        url = result.select_one('.yuRUbf a')['href']
        dic[heading]=url        
        print(heading, url, sep='\n')      
    return dic  

Можно использовать библиотеку BeautifulSoup для парсинга результатов поиска Google по конкретному запросу. Функция принимает один аргумент, x, который представляет собой поисковый запрос.

Функция начинает с определения словаря параметров, используемых в HTTP-запросе к странице поиска Google. Параметр q представляет поисковый запрос, а параметры gl и hl указывают страну и язык результатов поиска соответственно.

Затем функция использует библиотеку requests для отправки HTTP-запроса GET на страницу поиска Google, передавая заголовки и параметры в качестве аргументов. Атрибут html.text используется для получения HTML-кода исходной страницы результатов поиска. Этот HTML-код затем передается конструктору BeautifulSoup, вместе с парсером lxml, для создания объекта BeautifulSoup, который может использоваться для разбора HTML.

Затем функция использует метод select, чтобы найти все элементы HTML с атрибутом class равным tF2Cxc, которые представляют лучшие результаты поиска. Для каждого из этих элементов функция использует метод select_one, чтобы извлечь заголовок и ссылку на результат поиска. Заголовок извлекается из элемента .DKV0Md, а ссылка извлекается из элемента a внутри элемента .yuRUbf.

unis['Search']=mydata.Name.apply(lambda x: x +' магистратура по науке о данных')
unis['z']=mydata['Search'].apply(lambda x:get_top_results(x))

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