Веб-скрейпинг с помощью 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:
- Яркие данные — Инструмент корпоративного уровня для извлечения больших объёмов данных.
- Octoparse — Гибкий многофункциональный инструмент с бесплатными и премиум-планами.
- ParseHub — Подходит новичкам, хороший бесплатный тариф, есть несколько багов.
- Apify — Готовые шаблоны, отлично подходят для нишевых сценариев использования.
- Веб-скрапер — Локализованный скрапинг через браузерное расширение, удобный в использовании.
Я не связан ни с одним из них. А теперь вернемся к 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: Установка необходимых библиотек
Затем установите необходимые библиотеки для веб-скрейпинга и анализа данных. К ним относятся requests, BeautifulSoup, панды, и 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 предоставляют удобную, гибкую и эффективную платформу для скрапинга и анализа веб-данных.
Есть вопросы? Напишите в комментариях!

