Веб-скрапинг — один из лучших методов сбора данных для сбора данных и создания на их основе пользовательских наборов данных.
Наличие высококачественных наборов данных имеет важное значение в эту эпоху принятия решений на основе данных. Несмотря на то, что существует множество общедоступных наборов данных, иногда вам может потребоваться создать пользовательские наборы данных, отвечающие вашим конкретным потребностям. Веб-скрапинг позволяет извлекать данные с веб-сайтов. Затем вы можете использовать эти данные для создания собственного набора данных.
Обзор методов сбора данных
Существуют разные методы сбора данных. Они включают ручной ввод данных, API, общедоступные наборы данных и веб-скрапинг. Каждый метод имеет свои преимущества и ограничения.
Ввод данных вручную занимает много времени и подвержен человеческим ошибкам, особенно при крупномасштабном сборе данных. Тем не менее, это полезно для мелкомасштабного сбора данных и когда данные недоступны другими способами.
API-интерфейсы позволяют разработчикам получать доступ к данным и извлекать их в структурированном виде. Они часто предоставляют информацию в режиме реального времени или регулярно обновляемую информацию. Однако доступ к API может быть ограничен, требовать аутентификации или иметь ограничения на использование.
Общедоступные наборы данных охватывают широкий спектр тем и областей. Они предварительно собраны и часто имеют структурированный формат, что делает их легко доступными. Они могут сэкономить время и силы, когда требуемые данные совпадают с доступными наборами данных. Однако они могут не всегда соответствовать вашим конкретным потребностям или быть актуальными.
Веб-скрапинг позволяет собирать данные с веб-сайтов, которые не предлагают API или имеют ограниченный доступ. Это позволяет настраивать, масштабировать и собирать данные из нескольких источников. Однако для этого требуются навыки программирования, знание структуры HTML и соблюдение правовых и этических норм.
Выбор веб-скрейпинга для сбора данных
Веб-скрапинг позволяет извлекать информацию непосредственно с веб-страниц, предоставляя вам доступ к широкому спектру источников данных. Это также дает вам контроль над тем, какие данные извлекать и как их структурировать. Это позволяет легко адаптировать процесс очистки в соответствии с вашими конкретными требованиями и извлекать точную информацию, необходимую для вашего проекта.
Определение источника данных
Первым шагом в парсинге веб-страниц является определение источника данных. Это веб-сайт, содержащий данные, которые вы хотите очистить. При выборе источника данных убедитесь, что вы соблюдаете условия обслуживания источника. В этой статье в качестве источника данных будет использоваться IMDb (база данных фильмов в Интернете).
Настройка вашей среды
Настроить виртуальную среду. Затем выполните следующую команду, чтобы установить необходимые библиотеки.
Установка pip запрашивает BeautifulSoup4 Pandas
Вы будете использовать Запросы библиотека для выполнения HTTP-запросов. красивыйсуп4 для анализа содержимого HTML и извлечения данных с веб-страниц. Наконец, вы будете использовать панды для обработки и анализа данных.
Полный исходный код доступен в Репозиторий GitHub.
Написание скрипта парсинга веб-страниц
Импортируйте установленные библиотеки в свой скрипт, чтобы иметь возможность использовать предоставляемые ими функции.
Импортировать Запросы
от бс4 Импортировать КрасивыйСуп
Импортировать время
Импортировать панды как пд
Импортировать ре
время и ре модули являются частью стандартной библиотеки Python. Следовательно, не требует отдельной установки.
время добавит задержки в процесс парсинга, в то время как ре будет иметь дело с обычные выражения.
Вы будете используйте Beautiful Soup для очистки целевого веб-сайта.
Создайте функцию, которая отправит HTTP-запрос GET на ваш целевой URL-адрес. Затем он должен получить содержимое ответа и создать КрасивыйСуп объект из содержимого HTML.
дефget_soup(url, params=None, заголовки=None):
ответ = request.get (url, params=params, headers=заголовки)
суп = BeautifulSoup(response.content, "html.parser")
возвращаться суп
Следующим шагом является извлечение информации из КрасивыйСуп объект.
Чтобы извлечь информацию, вам нужно понять структуру вашего целевого веб-сайта. Это включает в себя проверку HTML-кода веб-сайта. Это поможет вам определить элементы и атрибуты, которые содержат данные, которые вы хотите извлечь. Чтобы проверить целевой веб-сайт, откройте его ссылку в веб-браузере и перейдите на веб-страницу, содержащую данные, которые вы хотите очистить.
Затем щелкните правой кнопкой мыши веб-страницу и выберите Осмотреть из контекстного меню. Это откроет инструменты разработчика браузера.
В HTML-коде веб-страницы найдите элементы, содержащие данные, которые вы хотите очистить. Обратите внимание на HTML-теги, классы и атрибуты, связанные с нужными вам данными. Вы будете использовать их для создания селекторов для извлечения данных с помощью BeautifulSoup. На скриншоте выше видно, что название фильма находится внутри заголовок элемента списка сорт. Проверьте каждую функцию, которую вы хотите извлечь.
Создайте функцию, которая будет извлекать информацию из КрасивыйСуп объект. В этом случае функция находит название, рейтинг, описание, жанр, дату выхода, режиссеров и звезд фильма, используя соответствующие теги HTML и атрибуты класса.
дефExtract_movie_data(фильм):
название = фильм.найти("ч3", класс_="заголовок элемента списка").находить("а").текст
рейтинг = фильм.найти("див", класс_="рейтинги-imdb-рейтинг").сильный.текст
описание = фильм.найти("див", класс_="содержание элемента списка").найти все("п")[1].text.strip()
жанр_элемент = фильм.найти("охватывать", класс_="жанр")
жанр = жанр_элемент.текст.полоса() если жанр_элемент ещеНикто
Release_date = фильм.найти("охватывать", класс_="lister-item-year text-muted unbold").текст.полоса()
Director_stars = фильм.найти("п", класс_="текст отключен").найти все("а")
директора = [человек.текст для человек в директор_звезды[:-1]]
звезды = [человек.текст для человек в директор_звезды[-1:]]
фильм_данные = {
"Заголовок": заголовок,
"Рейтинг": рейтинг,
"Описание": описание,
"Жанр": жанр,
"Дата выпуска": Дата выпуска,
"Директора": режиссеры,
«Звезды»: звезды
}
возвращаться movie_data
Наконец, создайте функцию, которая будет выполнять фактическую очистку, используя две вышеупомянутые функции. Это займет год и максимальное количество фильмов, которые вы хотите очистить.
дефscrape_imdb_movies(год, лимит):
базовый_адрес = " https://www.imdb.com/search/title"
заголовки = {«Принять-Язык»: "ан-США, ан; д = 0,9"}
фильмы = []
старт = 1
пока len (фильмы) < лимит:
параметры = {
"Дата выпуска": год,
"Сортировать": "количество_голосов, по убыванию",
"начинать": начинать
}
суп = get_soup (base_url, params=params, headers=заголовки)
список_фильмов = суп.найти_все("див", класс_="расширенный режим элемента списка")
если лен (список_фильмов) == 0:
перерыв
для фильм в список_фильмов:
movie_data = extract_movie_data (фильм)
Movies.append (данные_фильма)
если len (фильмы) >= limit:
перерыв
старт += 50# IMDb отображает 50 фильмов на странице
время сна(1) # Добавляем задержку, чтобы не перегружать сервер
возвращаться кино
Затем позвоните в деф скребок_imdb_movies делать выскабливание.
# Собрать 1000 фильмов, выпущенных в 2023 году (или столько, сколько доступно)
фильмы = scrape_imdb_movies(2023, 1000)
Теперь у вас есть данные.
Следующим шагом является создание набора данных из этих данных.
Создание набора данных из очищенных данных
Создайте DataFrame с помощью Pandas из вычищенных данных.
дф = пд. Датафрейм (фильмы)
Затем выполните предварительную обработку и очистку данных. В этом случае удалите строки с отсутствующими значениями. Затем извлеките год из даты выпуска и преобразуйте его в числовое. Удалите ненужные столбцы. Преобразовать Рейтинг столбец в числовой. Наконец, удалите неалфавитные символы из Заголовок столбец.
df = df.dropna()
дф[«Год выпуска»] = дф['Дата выпуска'].str.extract(г '(\ д {4})')
дф[«Год выпуска»] = pd.to_numeric (df[«Год выпуска»],
ошибки='принуждать').атип('Int64')
df = df.drop(['Дата выпуска'], ось=1)
дф['Рейтинг'] = pd.to_numeric (df['Рейтинг'], ошибки='принуждать')
дф['Заголовок'] = дф['Заголовок'].применять(лямбда х: re.sub(г'\В+', ' ', Икс))
Сохраните данные в файле для последующего использования в своем проекте.
df.to_csv("imdb_movies_dataset.csv", индекс =ЛОЖЬ)
Наконец, распечатайте первые пять строк набора данных, чтобы увидеть, как он выглядит.
дф.голова()
Вывод показан на скриншоте ниже:
Теперь у вас есть набор данных, полученный с помощью парсинга веб-страниц.
Веб-скрейпинг с использованием других библиотек Python
Beautiful Soup — не единственная библиотека Python, которую можно использовать для парсинга веб-страниц. Есть и другие библиотеки. Каждый со своими преимуществами и ограничениями. Изучите их, чтобы узнать, какой из них лучше всего подходит для вашего случая использования.