Веб-скрейпинг с помощью Jupyter Notebook

Веб-скрейпинг с помощью Jupyter Notebook

В этом руководстве я покажу, как использовать 🌠Jupyter Notebooks🌠 для веб-скрапинга. Мы разберём всё шаг за шагом — от написания кода для скрапинга до понимания данных и создания полезных визуализаций. Поверьте, это сделает ваши задачи по скрапингу намного проще и эффективнее! Давайте начнём.

Что такое Jupyter Notebooks?

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

Эти Jupyter Notebooks поддерживают разные языки, но Python чаще всего используют благодаря его простоте и большому количеству доступных библиотек. Jupyter позволяет работать с данными, строить графики и отлаживать код в рамках одного Jupyter Notebook. Он особенно полезен для разведочного анализа данных, что делает его идеальным инструментом для веб-скрапинга.

No-Code Alternatives

Вы можете ознакомиться с моей статьей, в которой перечислены Лучшие инструменты для скрейпинга без кода. Or, you can go over this TL;DR:

  1. Яркие данные — Инструмент корпоративного уровня для извлечения больших объёмов данных.
  2. Octoparse — Гибкий многофункциональный инструмент с бесплатными и премиум-планами.
  3. ParseHub — Подходит новичкам, хороший бесплатный тариф, есть несколько багов.
  4. Apify — Готовые шаблоны, отлично подходят для нишевых сценариев использования.
  5. Веб-скрапер — Локализованный скрапинг через браузерное расширение, удобный в использовании.

Я не связан ни с одним из них. А теперь вернемся к Jupyter 🌟!

Почему стоит использовать Jupyter Notebooks для веб-скрапинга?

Jupyter Notebooks особенно хорошо подходят для веб-скрейпинга по нескольким причинам:

Interactive Development

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

Документация и пояснения

С помощью Markdown в Jupyter Notebooks можно документировать каждый шаг процесса обычным текстом, объяснять логику кода и добавлять примечания. Если потом вернуться к нему, вашу работу будет проще понять другим (и вам самим). Это отличный способ создавать обучающие материалы и делиться знаниями.

Анализ и визуализация данных

После того как вы извлечете данные, Jupyter Notebooks позволяют обрабатывать, анализировать и визуализировать их в той же среде. Вы можете обрабатывать данные и создавать наглядные визуализации с помощью библиотек pandas, matplotlib и seaborn.

Воспроизводимость и совместное использование

Jupyter Notebooks можно легко передавать в виде файлов .ipynb, чтобы другие могли просматривать и запускать код на своих системах. Вы также можете экспортировать их в другие форматы, например HTML или PDF, чтобы представлять результаты в более презентабельном виде.

Как использовать Jupyter Notebooks для веб-скрапинга?

Прежде чем начать скрейпинг, нужно настроить окружение. Ниже приведено простое руководство для старта.

Шаг 1: Установите Python и Jupyter

Убедитесь, что у вас есть Python 3.6 or higher установлен на вашем компьютере. Если нет, его можно скачать с официального сайта Python.

После установки Python вы можете установить Jupyter Notebooks с помощью pip, менеджер пакетов Python.

pip install jupyter

Шаг 2: Создание виртуального окружения

Для проекта полезно создать виртуальное окружение, чтобы упорядочить зависимости. Новое виртуальное окружение можно создать следующей командой:

python -m venv scraper

Затем активируйте окружение:

  • Windows: scraper\Scripts\activate
  • macOS/Linux: source scraper/bin/activate

Шаг 3: Установка необходимых библиотек

Затем установите необходимые библиотеки для веб-скрейпинга и анализа данных. К ним относятся requestsBeautifulSoupпанды, и seaborn для веб-скрапинга и визуализации данных.

pip install requests beautifulsoup4 pandas seaborn

После установки библиотек Jupyter Notebook можно запустить так:

jupyter notebook

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

Пошаговый веб-скрапинг с Jupyter Notebooks

Теперь, когда все настроено, давайте перейдем к процессу веб-скрейпинга в Jupyter Notebooks.

Шаг 1: Определите целевой веб-сайт

В этом руководстве мы извлечем данные с сайта под названием Worldometer. Этот сайт предоставляет подробную статистику по различным глобальным темам, в том числе по выбросам CO2.

Страница, которую мы хотим спарсить, содержит таблицу с данными о выбросах CO2 в США.

Шаг 2: Отправка HTTP-запросов для получения данных

Чтобы получить данные, сначала нужно отправить HTTP-запрос на сервер сайта. Мы будем использовать requests Для этого используется библиотека. Вот как можно получить содержимое страницы:

импорт requests
# URL of the target website
url = 'https://www.worldometers.info/co2-emissions/us-co2-emissions/'
# Send a GET request to the website
response = requests.get(url)
# Check if the request was successful
если response.status_code == 200:
печать('Веб-страница успешно получена!')
else:
печать('Failed to retrieve the page')

Шаг 3: Разбор HTML-содержимого

После получения содержимого страницы нужно извлечь интересующие нас данные. Мы будем использовать BeautifulSoup чтобы распарсить HTML и найти таблицу данных.

с сайта bs4 импорт BeautifulSoup
# Parse the HTML content
soup = BeautifulSoup(response.text, 'html.parser')
# Find the table containing the CO2 emissions data
table = soup.find('table')

Шаг 4: Извлечение данных из таблицы

Далее нужно извлечь заголовки и строки из таблицы. Можно перебрать каждую строку таблицы и собрать данные в список.

# Extract the table headers
headers = [header.text.strip() для header в table.find_all('th')]
# Extract the rows of data
rows = []
для row в table.find_all('tr')[1:]: # Skip the header row
cells = row.find_all('td')
row_data = [cell.text.strip() для cell в cells]
rows.append(row_data)
# Print the headers and first row to check the data
печать(headers)
печать(rows[0])

Шаг 5: Сохранение данных в CSV-файл

Когда данные представлены в структурированном формате, их можно сохранить в CSV файл для последующего анализа. Мы воспользуемся встроенным в Python модулем csv модуль для этого.

импорт csv
# Define the output CSV file
csv_file = 'co2_emissions.csv'
# Write the data to the CSV file
с открыть(csv_file, mode='w', newline='', кодировка='utf-8') в роли file:
writer = csv.writer(file)
writer.writerow(headers) # Write headers
writer.writerows(rows) # Write rows
печать(f"Data has been saved to {csv_file}")

Шаг 6: Анализ данных

Теперь, когда данные сохранены в CSV-файл, мы можем использовать панды чтобы загрузить его в DataFrame для удобного анализа.

импорт панды в роли pd
# Load the data into a pandas DataFrame
df = pd.read_csv(csv_file)
# Display the first few rows of the data
df.head()

Шаг 7: Визуализация данных

Наконец, давайте визуализируем данные с помощью seaborn и matplotlib. Например, мы можем построить линейный график, чтобы показать, как менялись выбросы CO2 за эти годы.

импорт seaborn в роли sns
импорт matplotlib.pyplot в роли plt
# Convert 'Fossil CO2 Emissions' column to numeric
df['Fossil CO2 Emissions (tons)'] = df['Fossil CO2 Emissions (tons)'].str.replace(',', '').astype(float)
# Ensure the 'Year' column is numeric
df['Year'] = pd.to_numeric(df['Year'], errors='coerce')
# Sort the data by year
df = df.sort_values(by='Year')
# Create a line plot of CO2 emissions over the years
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x='Year', y='Fossil CO2 Emissions (tons)', marker='o')
plt.title('CO2 Emissions in the U.S. Over the Years', fontsize=16)
plt.xlabel('Year', fontsize=12)
plt.ylabel('Fossil CO2 Emissions (tons)', fontsize=12)
plt.grid(Правда)
plt.show()

Сценарии использования Jupyter Notebooks в веб-скрапинге

Jupyter Notebooks идеально подходят для многих сценариев веб-скрейпинга, особенно когда скрейпинг, анализ и визуализация объединены в одном месте. Вот несколько сценариев использования:

Educational Purposes

Jupyter Notebooks отлично подходят для создания интерактивных учебных материалов. Вы можете обучать новичков веб-скрапингу, объясняя код и показывая результаты в режиме реального времени.

Исследование и анализ данных

Jupyter предоставляет отличную среду для специалистов по данным или исследователей, чтобы изучать собранные данные. Можно быстро итеративно дорабатывать код, очищать данные и визуализировать тенденции или закономерности.

Прототипирование и тестирование

Если вы разрабатываете инструмент или скрипт для веб-скрапинга, Jupyter позволяет быстро тестировать небольшие фрагменты кода. Такой итеративный процесс может сэкономить время на этапе разработки.

Заключение

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

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

Есть вопросы? Напишите в комментариях!

Похожие записи