CoderCastrov logo
CoderCastrov
Анализ данных

Парсинг веб-сайтов и Coursera

Парсинг веб-сайтов и Coursera
просмотров
4 мин чтение
#Анализ данных

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

Изображение парсинга веб-страницы из Google изображений

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

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

Лучший способ начать - использовать библиотеку, которая уже делает это. Да... это правильно, мы включаем библиотеку Beautiful Soup для этой цели. Вы можете получить документацию здесь: https://pypi.org/project/beautifulsoup4/

Для нашего понимания о том, как это работает, давайте напишем пример парсинга веб-сайта и создания набора данных для этого. Мы будем работать с парсингом одного из наших известных образовательных веб-сайтов Coursera. Здесь у нас отличная возможность извлечь данные, так как у нас есть URL, который содержит все курсы с подробностями в виде карточки: https://www.coursera.org/courses

Веб-сайт, показывающий все доступные курсы.

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

from bs4 import BeautifulSoup                   
import requests

Здесь BeautifulSoup используется для целей парсинга, а библиотека requests поможет нам отправить HTTP-запрос из Python на веб-сайт, чтобы получить веб-контент.

response = requests.get("https://www.coursera.org/courses")

Теперь нам нужно использовать метод get, в котором мы передаем ссылку, которую мы хотим разобрать в качестве URL. requests.get("...") поможет нам получить содержимое веб-страницы, и мы можем сохранить его в переменную, скажем, response.

html_soup = BeautifulSoup(response.content, 'html.parser')

Отсюда мы создаем нашу "суп". У нас есть метод BeautifulSoup, который принимает два параметра: содержимое, которое мы хотим, и тип парсера, с которым мы хотим разобрать нашу страницу. Здесь мы используем html.parser. Мы сохраняем это в переменную html_soup. Одна вещь, которую мы можем увидеть, когда мы смотрим на интерфейс, - курсы перечислены в виде списка с, скажем, до 10 курсов на одной странице, за которыми следуют до 100 страниц. Поэтому мы не можем просто применить нашу "суп" на одной странице, так как нам нужно получить все курсы, и поэтому нам нужно использовать 2 цикла, один для получения каждой страницы и другой для итерации по каждому списку.

url = "https://www.coursera.org/courses?page=" +str(i) + "&index=prod_all_products_term_optimization"

Это URL, который мы можем найти на каждой странице, только число после page= меняется, и поэтому в первом цикле мы можем поместить этот код, чтобы получить URL, сделав число динамическим.

Это помогает нам просто просканировать все курсы, просто передавая тег, который мы хотим разобрать, и класс. Чтобы понять это простым способом, давайте рассмотрим пример.

Просто посмотрите на выделенный текст. Это заголовок, связанный с названием курса. Мы видим, что тег, связанный с этим, - "h2", а класс - "color-primary-text card-title headline-1-text", это первый и третий параметры. Во второй параметр мы передаем пустой список, который мы хотим добавить в каждый курс. И содержимое, которое мы извлекаем, сохраняется здесь, и позже становится целым столбцом фрейма данных.

Вы можете увидеть в функции, что я использовал цикл for для получения 100 страниц. Это может варьироваться в зависимости от ваших потребностей, и я просто хотел сделать это, чтобы получить несколько данных о курсах в качестве демонстрации. Для второго цикла я взял от 0 до 9, чтобы перебрать все курсы на одной странице. Как упоминалось ранее, мы берем переменную soup, чтобы получить данные, передавая содержимое и парсер через BeautifulSoup(...).

x = soup.find_all(html_tag, class_ = tag_class)[j].get_text()

Затем мы используем метод find_all в soup, чтобы получить точный текст, на который ссылается парсинг, и сохраняем его в переменную x. Этот текст добавляется в список на каждой итерации, что позволяет получить весь столбец набора данных.

course_title = []               
course_organization = []                       course_Certificate_type = []           
course_rating = []                      
course_difficulty = []                       course_students_enrolled = []

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

auto_Scrapper_Class('h2',course_title,'color-primary-text card-title headline-1-text') 
                      auto_Scrapper_Class('span',course_organization,'partner-name m-b-1s')          
            auto_Scrapper_Class('div',course_Certificate_type,'_jen3vs _1d8rgfy3')  
                     auto_Scrapper_Class('span',course_rating,'ratings-text')       
                auto_Scrapper_Class('span',course_difficulty,'difficulty')     
                  auto_Scrapper_Class('span',course_students_enrolled,'enrollment-number')

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

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

course_df.to_csv(UCoursera_Courses.csv)

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

Пример выходных данных выглядит так:

Пример набора данных вкратце.

Если вам понравилась эта статья и она оказалась полезной, подпишитесь на меня. Я буду рад сотрудничать и работать над проектами с вами.

Код для парсинга :


Siddharth1698/Coursera-Course-Dataset

Я попытался спарсить данные с веб-сайта Coursera, чтобы создать набор данных курсов Coursera для почти 890 курсов. …

github.com

Спарсенный набор данных:

Набор данных курсов Coursera

Набор данных курсов, спарсенный с веб-сайта Coursera

www.kaggle.com

Спасибо еще раз.. и наслаждайтесь парсингом... :)