Как установить beautifulsoup python
Перейти к содержимому

Как установить beautifulsoup python

  • автор:

Узнайте, как использовать Beautiful Soup для парсинга страниц с помощью Python за 3 минуты

Ищете краткое руководство, чтобы начать парсинг веб-страниц с помощью Python’s Beautiful Soup? Вы пришли по адресу – читайте статью и начните работу.

1 min read
Rafael Levi
Senior Business Manager

В этой статье мы обсудим:

  • Как работает веб-скрапинг?
  • Что такое Beautiful Soup?
  • Как установить Requests и Beautiful Soup
  • Шаги для парсинга на Python с Requests и Beautiful Soup

Как работает веб-скрапинг?

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

Допустим, нам нужны целевые данные в тегах заголовка H3. Мы напишем код для парсера, который будет искать именно эту информацию. Он будет работать в три этапа:

Этап 1: Отправка запроса на сервер для загрузки содержимого сайта.
Шаг 2: Изучение HTML страниц для поиска нужных тегов H3.
Шаг 3: Копирование текста внутри целевых тегов, создание выходных данных в формате, указанном ранее в коде.

Задачи веб-скрапинга можно выполнять на многих языках программирования с помощью различных библиотек, но именно библиотека Beautiful Soup в Python – наиболее востребованный и эффективный метод. Ниже мы рассмотрим основы парсинга на Python с Beautiful Soup.

Что такое Beautiful Soup?

Beautiful Soup является библиотекой Python, которая анализирует документы HTML и XML. Она создает дерево разбора для проанализированных страниц, которое позволяет извлекать данные из HTML. Кроме того, автоматически преобразует документ в Юникод. Поэтому вам не придется думать о кодировках. Этот инструмент помогает не только парсить, но и очищать данные. Beautiful Soup поддерживает парсер HTML библиотеки Python и несколько сторонних: lxml или hml5lib.

Подробнее о возможностях читайте здесь: Документация по Beautiful Soup.

Как установить Requests и Beautiful Soup

Вам нужен pip или другой установщик Python. По желанию можете использовать свою лабораторию jupyter. В этой статье мы используем pip, так как он более удобный. Откройте терминал или Jupyter Lab и напишите:

Давайте распечатаем таблицу, чтобы получить лучшее представление о том, что у нас есть, и воспользуемся .prettify().

Ваш вывод должен выглядеть примерно так:

Теперь ищем нужные вам данные. Для данного примера нам нужна только цитата и имя автора. Как видите, все эти данные находятся по адресу

Давайте пройдемся по всем экземплярам класса и получим цитаты в нашей таблице.

Теперь вам должны быть доступны только
в каждом экземпляре цикла. Вы можете проверить это, выполнив print(row) в цикле.

Мы ищем информацию под ключом “img alt”, поэтому давайте создадим переменную quote и присвоим ей эти данные.

Как вы видите, я завернул его в оператор ‘try’. В этом случае, если в одной из строк не будет искомых данных, вы не получите ошибку, и цикл будет продолжен. Я также разделил результаты на ‘-‘. Как вы видели ранее, текст и имя автора разделяются с помощью знака ‘-‘ Давайте используем его, чтобы разделить эти два знака.
Вот и все, вы закончили. Вот как теперь должна выглядеть ваша цитата:

В конце этого процесса вы можете сохранить свои данные в файл, и ваш код должен выглядеть примерно так:

PyCharm. Подключение BeautifulSoup

Здравствуйте. Пытаюсь подключить библиотеку BeautifulSoup. Скачал библиотеку. Поискал в гугле как её установить через cmd установил. Судя по видео из примера установка прошла успешно. В примере у меня написано как сделать импорт:

from bs4 import BeautifulSoup 

Но у меня выдаёт ошибку что bs4 не найден. Как к PyCharm подключить эту библиотеку?
Отслеживать
задан 10 июл 2017 в 3:29
21 1 1 золотой знак 2 2 серебряных знака 5 5 бронзовых знаков

У вас один питон стоит на компьютере? Посмотрите в пичарме в пути: File/Settings/Project. /Project Interpreter там в комбобоксе выбор будет интерпретаторов. Убедитесь что там стоит нужный вам и что в его модулях будет beautifulsoup4

10 июл 2017 в 5:49

Посмотрел в настройках у меня в настройках два интерпритатора 3.5 и 3.6. Я работал под 3.5. В списке пакетов beautifulsoup4 нет. А у 3.6 есть. Переключил на 3.6 но под ним почему то не работает отладка. Кнопки выполнения кода не активны.

12 июл 2017 в 14:30

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В настройках нажмите кнопочку, и будет Вам счастье.

скриншот

Отслеживать
ответ дан 1 авг 2017 в 14:36
Protect children of Donbas2014 Protect children of Donbas2014
1,339 13 13 серебряных знаков 28 28 бронзовых знаков

Для того что бы устанавливать пакеты сразу в Pycharm рекомендуем использовать встроенный терминал.

введите сюда описание изображения

Если вы хотите использовать библиотеки через Windows зайдите в настройке и добавьте эту библиотеку вручную или выберете в настройках интерпретатора System Intepritator. введите сюда описание изображения введите сюда описание изображения

Веб-скрейпинг с нуля на Python: библиотека Beautiful Soup

Данные есть везде, на каждом посещенном вами сайте. Чаще всего они уже представлены в читаемом текстовом формате, пригодном для использования в новом проекте, однако, несмотря на то, что нужный текст всегда можно скопировать и вставить прямо со страницы сайта, когда речь заходит о больших данных — о тексте с десятка тысяч веб-сайтов — скрейпинг приходит на помощь.

Обучаться веб-скрейпингу (web-scraping) поначалу сложно, однако если вы начнете своё знакомство с большими данными, используя правильные инструменты, то предстоящий вам путь существенно облегчится.

В пошаговом руководстве вы узнаете, как сделать скрейпинг нескольких страниц веб-сайта с помощью самой простой и популярной библиотеки Python для скрейпинга: Beautiful Soup.

Руководство состоит из двух разделов. В первом разделе речь пойдет о том, как осуществить скрейпинг одной страницы, а во втором — о том, как скрейпить сразу нескольких страниц с помощью примера кода, из первого раздела.

Список рассматриваемых в руководстве тем:

  • Что нужно для начала веб-скрейпинга?
  • Установка, запуск и настройка Python-библиотеки Beautiful Soup.
  • Раздел 1: cкрапинг одной страницы:
    — Импорт библиотек.
    — Получение HTML-содержимого веб-сайта.
    — Анализ веб-сайта и его HTML-разметки.
    — Одновременное нахождение нескольких HTML-элементов с помощью Beautiful Soup.
    — Экспорт данных в txt -файл.
  • Раздел 2: cкрапинг нескольких страниц:
    — Получение атрибута href .
    — Нахождение нескольких элементов с помощью Beautiful Soup.
    — Переход по каждой из необходимых ссылок.

Что нужно для веб-скрейпинга?

  1. Beautiful Soup: это пакет Python для анализа веб-сайтов, построенных на технологиях HTML и CSS, то есть, без использования JavaScript-фреймворков вроде React, Angular, VueJS. Beautiful Soup хорошо справляется с разбором HTML и XML документов на части: библиотека создаёт дерево синтаксического анализа веб-страниц для последующего извлечения с них разнообразных данных в удобном для программиста формате. Не волнуйтесь, вам не нужны предыдущие знания о Beautiful Soup, чтобы выполнять указания из руководства — во время чтения вы всему научитесь с нуля!
  2. Библиотека requests: это стандарт индустрии для выполнения HTTP-запросов на языке программирования Python. Данная библиотека используется в дополнение к Beautiful Soup, когда нужно получить HTML-файл с веб-сайта.
  3. Python: чтобы следовать руководству, вам не нужно быть экспертом в Python, однако, по крайней мере, вы должны знать, как работают циклы for и списки.

Перед началом руководства, убедитесь, что на вашем компьютере установлен Python 3 версии.

Давайте начнем ознакомление с пособием для новичков по настройке Beautiful Soup в Python!

Установка, запуск и настройка Python-библиотеки Beautiful Soup

  • Начнём с установки Beautiful Soup на ваш компьютер. Для этого выполните следующую команду в командной строке или терминале:
pip install bs4
  • Теперь установите парсер: он понадобится для извлечения данных из HTML-документов. В руководстве предлагается использовать библиотеку-парсер lxml , следовательно, выполните установочную команду:
pip install lxml
  • Пришло время устанавливать библиотеку requests . Для этого выполните следующую команду в командной строке или терминале:
pip install requests

Наконец-то настройка окружения завершена — можно приступать к программированию!

Раздел 1: Скрейпинг одной страницы

Руководство бережно проведёт вас через каждую строчку кода, необходимого для создания вашего первого скрейпера веб-сайтов. Полный код вы найдете в самом конце статьи. Давайте начнем!

Импорт библиотек

Для скрейпинга нам пригодятся библиотеки BeautifulSoup и request , поэтому импортируем их в программу с помощью двух строчек кода:

from bs4 import BeautifulSoup
import requests

Получение HTML-содержимого веб-сайта

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

В самом начале нам стоит выбрать ссылку на веб-сайт, для примера возьмём страницу диалогов фильма “Титаник”, но вы можете выбрать любой фильм; затем нужно сформировать и отправить HTTP-запрос на сайт, чтобы получить ответ, в котором и содержится нужное описание фильма. Получив ответ на запрос, сохраняем его в переменной с идентификатором result , чтобы использовать метод .text для получения содержимого страницы сайта:

website = 'https://subslikescript.com/movie/Titanic-120338'
result = requests.get(website)
content = result.text

Наконец, воспользуемся парсером lxml для получения “супа” — объекта, содержащего все данные во вложенной структуре, которая понадобится нам в работе позднее:

soup = BeautifulSoup(content, 'lxml')
print(soup.prettify())

Теперь, когда у нас уже есть объект soup , доступ к HTML в читабельном формате легко получается с помощью функции .prettify() . Несмотря на то, что HTML в текстовом редакторе также пригоден для ручного поиска конкретных его элементов, гораздо лучше сразу перейти к HTML-коду необходимого нам элемента страницы: в следующем шаге мы как раз это сделаем.

Анализ веб-сайта и его HTML-разметки

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

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

  1. Перейдите на веб-страницу с диалогами из выбранного вами фильма.
  2. Наведите курсор на название фильма или его диалоги, а затем щелкните правой кнопкой мыши: появится меню, в котором выберите пункт “Исследовать”, чтобы открыть исходный код страницы сразу на нужном месте.

Ниже приведена уменьшенная версия HTML-кода, полученного после нажатия на пункт меню “Исследовать”. В дальнейшем в качестве справочника используется именно эта HTML-разметка, полезная при определении местоположения элементов в следующем шаге руководства.

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

Новая переменная с идентификатором website , содержащая ссылку на веб-сайт, оформляется следующим образом:

root = 'https://subslikescript.com'
website = f'/movies'

Вы можете заметить в коде примера ещё одну новую переменную с идентификатором root — она пригодится позже.

Получение атрибута href

Сейчас вы узнаете, как получить атрибут href сразу для всех 30-ти фильмов, перечисленных на одной странице: для начала выберите любое название фильма из блока “список фильмов” на скриншоте выше.

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

На скриншоте видно, что ссылки внутри href не содержат корня ссылки на веб-сайт subslikescript.com : именно поэтому для составления полного веб-адреса пригодится ранее созданная переменная root, содержащая как раз корень для ссылок.

Теперь давайте найдем все ссылочные теги на странице со списком фильмов.

Одновременное нахождение нескольких HTML-элементов с помощью Beautiful Soup.

Для нахождения нескольких элементов в Beautiful Soup пригодится специальный метод .find_all() с параметром-настройкой href=True : данный метод позволяет удобно и быстро извлекать ссылки, соответствующие каждой из страниц с диалогами:

box.find_all('a', href=True)

Извлечь ссылки из href можно с помощью добавления указания на атрибут [‘href’] к выражению выше; однако метод .find_all() возвращает список, а не строки, поэтому придется получать атрибут href по одному внутри обходного цикла:

for link in box.find_all('a', href=True): 
link['href']

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

links = [link['href'] for link in box.find_all('a', href=True)]
print(links)

При выводе списка ссылок на экран с помощью функции print() , вы увидите все те ссылки, веб-страницы которых планируется скрейпить. В следующем шаге руководства мы как раз реализуем скрейпинг каждой из них.

Переход по каждой из необходимых ссылок

Для получения диалогов фильмов по каждой из полученных на предыдущем этапе ссылок, выполним те же шаги, что и для одной ссылки ранее, но на этот раз воспользуемся циклом for , повторив таким образом все действия по нескольку раз:

for link in links: 
result = requests.get(f'/')
content = result.text
soup = BeautifulSoup(content, 'lxml')

Как вы помните, сохранённые ранее ссылки не содержат корня веб-сайта subslikescript.com , поэтому следующим шагом будет форматирование ссылок выражением f’/’ для добавления пресловутого корня. Остальной же код программы-скрейпера остаётся таким же, как в первой части руководства.

Полный код для проекта выглядит следующим образом:

Для перемещения по страницам сайта у вас есть два варианта действий:

  • Вариант 1:
    Просмотрите детали о любой из страниц, отображаемых на сайте (например, 1,2,3, …1234) с целью получения тега , содержащего атрибут href со ссылками на каждую страниц описания фильмов. Получив ссылки, объедините их с корнем и выполните действия, описанные в разделе 2.
  • Вариант 2:
    Перейдите на страницу под номером 2 и скопируйте полученную ссылку. Она должна выглядеть так: subslikescript.com/movies?page=2 . Как вы заметили, для каждой страницы сайт генерирует ссылку, следуя одному шаблону: f’?page=’ . Вы можете повторно использовать переменную website и выполнить цикл по диапазону чисел между единицей и десяткой, если хотите перейти по первым десяти ссылкам.

Облегчаем себе жизнь с помощью BeautifulSoup4

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

Статья ориентирована на новичков, таких же как и я.

Начало

Для начала разберем задачу. Взял я малоизвестный сайт новостей об Израиле, так как сам проживаю в этой стране, и хочется читать новости без рекламы и не интересных новостей. И так, имеется сайт, на котором постятся новости: есть новости помеченные красным, а есть обычные. Те что обычные — не представляют собой ничего интересного, а отмеченные красным являются самым соком. Рассмотрим наш сайт.

Как видно сайт достаточно большой и есть много ненужной информации, а ведь нам нужно использовать лишь контейнер новостей. Давайте использовать мобильную версию сайта,
чтобы сэкономить себе же время и силы.

Как видите, сервер отдал нам красивый контейнер новостей (которых, кстати, больше чем на основном сайте, что нам на руку) без рекламы и мусора.

Давайте рассмотрим исходный код, чтобы понять с чем мы имеем дело.

Как видим каждая новость лежит по-отдельности в тэге ‘a’ и имеет класс ‘lenta’. Если мы откроем тэг ‘a’, то заметим, что внутри есть тэг ‘span’, в котором находится класс ‘time2’, либо ‘time2 time3’, а также время публикации и после закрытия тэга мы наблюдаем сам текст новости.

Что отличает важную новость от неважной? Тот самый класс ‘time2’ или ‘time2 time3’. Новости помеченые ‘time2 time3’ и являются нашими красными новостями. Раз уж суть задачи понятна, перейдем к практике.

Практика

Для работы с парсерами умные люди придумали библиотеку «BeautifulSoup4», в которой есть еще очень много крутых и полезных функций, но об этом в следующий раз. Нам также понадобиться библиотека Requests позволяющая отправлять различные http-запросы. Идем их скачивать.

(убедитесь, что стоит последняя версия pip)

pip install beautifulsoup4 
pip install requests

Переходим в редактор кода и импортируем наши библиотеки:

from bs4 import BeautifulSoup import requests

Для начала сохраним наш URL в переменную:

url = 'http://mignews.com/mobile'

Теперь отправим GET()-запрос на сайт и сохраним полученное в переменную ‘page’:

page = requests.get(url)
print(page.status_code)

Код вернул нам статус код ‘200’, значит это, что мы успешно подключены и все в полном порядке.

Теперь создадим два списка (позже я объясню для чего они нужны):

 filteredNews = [] allNews = [] 

Самое время воспользоваться BeautifulSoup4 и скормить ему наш page, указав в кавычках как он нам поможет ‘html.parcer’:

soup = BeautifulSoup(page.text, "html.parser")

Если попросить его показать, что он там сохранил:

print(soup)

Нам вылезет весь html-код нашей страницы.

Теперь воспользуемся функцией поиска в BeautifulSoup4:

allNews = soup.findAll('a', class_='lenta')

Давайте разберём поподробнее, что мы тут написали.

В ранее созданный список ‘news’ (к которому я обещал вернуться), сохраняем все с тэгом ‘а’ и классом ‘news’. Если попросим вывести в консоль все, что он нашел, он покажет нам все новости, что были на странице:

Как видите, вместе с текстом новостей вывелись теги ‘a’, ‘span’, классы ‘lenta’ и ‘time2’, а также ‘time2 time3’, в общем все, что он нашел по нашим пожеланиям.

for data in allNews: if data.find('span', class_='time2 time3') is not None: filteredNews.append(data.text)

Тут мы в цикле for перебираем весь наш список новостей. Если в новости мы находим тэг ‘span’ и класc ‘time2 time3’, то сохраняем текст из этой новости в новый список ‘filteredNews’.

Обратите внимание, что мы используем ‘.text’, чтобы переформатировать строки в нашем списке из ‘bs4.element.ResultSet’, который использует BeautifulSoup для своих поисков, в обычный текст.

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

Выведем наши данные:

 for data in filteredNews: print(data) 

Вот что мы получаем:

Мы получаем время публикации и лишь интересные новости.

Дальше можно построить бот в Телеге и выгружать туда эти новости, либо создать виджет на рабочий стол с актуальными новостями. В общем, можно придумать удобный для себя способ узнавать о новостях.

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

Спасибо за внимание, был рад поделиться опытом.

  • python3
  • парсер
  • работа с данными
  • работа со списками
  • парсинг данных
  • beautiful soup
  • beautifulsoup
  • requests

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *