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

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


Предварительные условия

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

Шаг 1. Установка библиотек

Python снабжен несколькими библиотеками для веб-скрейпинга, такими как BeautifulSoup, Scrapy и Requests. В этом руководстве мы будем использовать BeautifulSoup, поскольку она удобна для начинающих и проста в освоении. Чтобы установить BeautifulSoup, можно воспользоваться менеджером пакетов pip, открыв командную строку или терминал и введя следующую команду:

pip install beautifulsoup4

Так вы установите BeautifulSoup на компьютер.

Шаг 2. Изучение веб-страниц

Прежде чем приступить к веб-скрейпингу сайта, необходимо понять его структуру. Это можно сделать, изучив веб-страницу с помощью инструментов разработчика веб-браузера. Чтобы открыть инструменты разработчика в Google Chrome, щелкните правой кнопкой мыши в любом месте веб-страницы и выберите “Inspect”.

Открыв инструменты разработчика, вы можете навести курсор на элементы страницы, чтобы увидеть их HTML-теги и атрибуты. Это поможет определить, из какого элемента нужно извлечь данные.

Шаг 3. Скрейпинг данных с сайта

Начнем со скрейпинга данных с простого сайта, например Википедии. Мы извлечем название сайта и выведем его на консоль.

Для начала импортируем необходимые библиотеки:

import requests
from bs4 import BeautifulSoup

Затем отправим GET-запрос на сайт, используя библиотеку requests:

url = "https://en.wikipedia.org/wiki/Main_Page"
response = requests.get(url)

Далее проведем парсинг HTML-содержимого сайта с помощью BeautifulSoup:

soup = BeautifulSoup(response.content, "html.parser")

Теперь можем извлечь название сайта, найдя тег <title>:

title = soup.find("title")

Выводим заголовок в консоль:

print(title.string)

Когда вы запустите этот код, вы увидите название сайта, выведенное в консоль.

Шаг 4. Извлечение данных с нескольких страниц

Теперь, когда мы знаем, как извлекать данные с одной веб-страницы, попробуем получить данные с нескольких страниц. В качестве примера будем использовать IMDB — сайт, на котором перечислены 250 лучших фильмов всех времен.

Для начала импортируем необходимые библиотеки:

import requests
from bs4 import BeautifulSoup

Затем отправим GET-запрос на первую страницу сайта, используя библиотеку requests:

url = "https://www.imdb.com/chart/top"
response = requests.get(url)

Далее проведем парсинг HTML-содержимого сайта с помощью BeautifulSoup:

soup = BeautifulSoup(response.content, "html.parser")

Теперь можем извлечь названия фильмов и их рейтинговые места, найдя соответствующие HTML-теги:

titles = soup.select(".titleColumn a")
ratings = soup.select(".imdbRating strong")

Метод select() возвращает список всех элементов, соответствующих селектору CSS. Мы выбираем все теги <a> внутри элементов <td class="titleColumn">, которые содержат названия фильмов, и все теги <strong> внутри элементов <td class="ratingColumn imdbRating">, которые содержат рейтинговые места.

Теперь можем пройти через список названий и рейтинговых мест фильмов и вывести их в консоль:

for i in range(len(titles)):
    print(f"{i+1}. {titles[i].text} - {ratings[i].text}")

Функция range() генерирует последовательность чисел от 0 до значения длины списка titles, которую мы используем для индексации списков titles и ratings. Атрибут text элемента возвращает текстовое содержимое тега.

Код целиком выглядит следующим образом:

import requests
from bs4 import BeautifulSoup

url = "https://www.imdb.com/chart/top"
response = requests.get(url)

soup = BeautifulSoup(response.content, "html.parser")

titles = soup.select(".titleColumn a")
ratings = soup.select(".imdbRating strong")

for i in range(len(titles)):
    print(f"{i+1}. {titles[i].text} - {ratings[i].text}")

При запуске этого кода вы увидите список из 250 лучших фильмов всех времен, выведенный в консоль, а также их рейтинговые места.

Заключение

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

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

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



Перевод статьи SPXWeb Scraping with Python and BeautifulSoup


Report Page