CoderCastrov logo
CoderCastrov
Python

Парсинг данных с использованием BeautifulSoup и SelectorGadget в Python 3

Парсинг данных с использованием BeautifulSoup и SelectorGadget в Python 3
просмотров
2 мин чтение
#Python
Table Of Content

    Благодаря Beautiful Soup вы можете выполнять парсинг данных в Python всего лишь несколькими строками кода. Используя несколько удобных инструментов, вы сможете стать настоящим мастером парсинга.

    Давайте начнем с установки BeautifulSoup и Requests в терминале:

    pip install bs4
    pip install requests

    Затем вам понадобится SelectorGadget. Лучше всего использовать плагин SelectorGadget для Chrome.

    В нашем случае мы будем парсить все лучшие фильмы с www.imdb.com Давайте воспользуемся SelectorGadget для поиска наших CSS-селекторов.

    1. Выберите любое из названий фильмов:
    1. Любой элемент, выделенный желтым цветом, будет выбран текущим CSS-селектором ("a"), который мы будем парсить. Поскольку нам нужны только названия фильмов, давайте попробуем отменить выбор других элементов (обозначенных красным выделением):
    1. В этом примере нам пришлось отменить выбор только одного элемента, чтобы остались только выделенные фильмы. Теперь, когда мы знаем наш CSS-селектор - ".lister-item-header a", мы можем начать создавать наш парсер на Python.

    2. Импортируем BeautifulSoup и Requests.

    from bs4 import BeautifulSoup
    import requests
    1. Загрузим URL в BeautifulSoup.
    url = "https://www.imdb.com/search/title?genres=drama&groups=top_250&sort=user_rating,desc"
    res = requests.get(url)
    soup = BeautifulSoup(res.text)
    1. Используем наш CSS-селектор для извлечения списка всех фильмов.
    movies = soup.select(".lister-item-header a")print(movies)Output:[<a href="/title/tt0111161/?ref_=adv_li_tt">Побег из Шоушенка</a>, <a href="/title/tt0068646/?ref_=adv_li_tt">Крестный отец</a>, <a href="/title/tt0468569/?ref_=adv_li_tt">Темный рыцарь</a>...]
    1. Извлекаем названия фильмов и ссылки на фильмы в два отдельных списка с использованием генератора списка.
    movies_titles = [title.text for title in movies]
    movies_links = ["http://imdb.com"+title["href"] for title in movies]print(movies_titles)
    print(movies_links)Output:['Побег из Шоушенка', 'Крестный отец', 'Темный рыцарь', 'Крестный отец 2'...]
    ['[http://imdb.com/title/tt0111161/?ref_=adv_li_tt'](http://imdb.com/title/tt0111161/?ref_=adv_li_tt%27), '[http://imdb.com/title/tt0068646/?ref_=adv_li_tt'](http://imdb.com/title/tt0068646/?ref_=adv_li_tt%27), '[http://imdb.com/title/tt0468569/?ref_=adv_li_tt'](http://imdb.com/title/tt0468569/?ref_=adv_li_tt%27), '[http://imdb.com/title/tt0071562/?ref_=adv_li_tt'](http://imdb.com/title/tt0071562/?ref_=adv_li_tt%27) ...]

    И вот, у вас есть список всех названий фильмов и соответствующих ссылок. Обратите внимание, что мы парсили только названия с первой страницы. Если мы хотим получить остальные, вы можете парсить каждую страницу отдельно или создать цикл for (сообщите мне, если вы хотите увидеть это в будущем учебнике!).

    Вы можете найти полный код парсера здесь на github:


    Примечание: IMDB может изменить свои CSS-селекторы или макет веб-сайта в будущем, поэтому у вас может быть другой селектор, чем показанный в этой статье.