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

Как из тега в python достать текст

  • автор:

Как достать текст из html тега python?

Author24 — интернет-сервис помощи студентам

Я уже знаю, что есть либа bs4 но все еще не понимаю как мне достать инфу из тега. Я знаю, что нужная мне информация лежит в теге в классе info, но как мне ее взять? Я пытался полностью прописать до нее путь, начинаю от родиельского класса до нее, и искал с помощью метода .find_all ничего. Как ?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как из элемента html кода достать текст? На selenium webdriver python
Всем привет. Задача открыть главную Яндекса, ввести любое слово (например "Тинькофф"), появится.

Как достать текст из тега ?
Требуется достать текст из следующей строки в html документе: <a href="/home/items">Достать этот.

Как получить текст из html тега?
Ребят, появилась надобность поработать с html или на него. <td></td><td >

Как достать html текст из webBrowser1
Добрый день! Не получается сохранить html текст по следующей ссылке: .

Автоматизируй это!

Эксперт Python

7104 / 4607 / 1215
Регистрация: 30.03.2015
Сообщений: 13,221
Записей в блоге: 29
ctepler, укажи сайт где это лежит и приложи код которым ты пытался достать
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как получить значение атрибута HTML тега через bs4 для Python?
У меня есть вот такая функция, которая получает название фильма, ищет этот фильм на КиноПоиске и.

Не знаю, как из html кода достать текст и найти в нём слово
На пересдачу по ООП нужно решить и понять следующую задачу: Поиск в WEB.Search Web).

Вывод текст из html-тега с сайта
Прошу дать пример вывода текста в теге с сайта для программы C#. <html> <ver>123</ver>.

Текст HTML распознавался как просто текст, а не HTML код
Здравствуйте! Подскажите пожалуйста, как сделать так, чтобы HTML текст не распознавался браузером.

Или воспользуйтесь поиском по форуму:

Как получить текст, находящийся внутри HTML тега Python

Мне нужно получить то, что находится внутри HTML тега. С помощью requests я получаю код страницы, а с помощью bs4 весь класс вместе с тегом. Но мне надо получить только содержимое тега. Пытался использовать регулярные выражения, но в содержимом может содержаться английский. Вот фрагмент с тем, что я использую:

soup = BeautifulSoup(dd.text, 'html.parser') a = soup.find_all("div", class_="flex-grow-1") 

Вот то, что я получаю:

А вот, что хочу: Some text. Возможно ли это реализовать?
Отслеживать
задан 1 мар 2021 в 13:17
27 1 1 серебряный знак 6 6 бронзовых знаков
find_all() возвращает массив элементов. Вы должны пройти их все и вызывать get_text()
1 мар 2021 в 13:26
a[0].text.strip()
1 мар 2021 в 13:45

1 ответ 1

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

soup = BeautifulSoup(dd.text, 'html.parser') a = soup.find_all("div", class_="flex-grow-1") value = a[0].getText() 
soup = BeautifulSoup(dd.text, 'html.parser') a = soup.find_all("div", class_="flex-grow-1") value = a[0].text 

Отслеживать
ответ дан 1 мар 2021 в 13:20
420 4 4 серебряных знака 12 12 бронзовых знаков

  • python
  • html
  • классы
  • bs4
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.2.16.5008

Туториал по библиотеке BeautifulSoup4

Парсеры — это программы, которые скачивают из интернета странички и разбирают их на составляющие: заголовок, картинка, текст… С помощью него можно выкачать с сайта гигабайты полезной информации. Библиотека BeautifulSoup4 как раз предназначена для парсинга.

В этой статье вы узнаете как распарсить сайт Франка Сонненберга. Цель: по ссылке на пост вытащить его название, текст и картинку.

Франк Сонненберг — известный американский писатель и коуч. За свои книги он попал в “Топ 100 Американских мыслителей”, а его блог принадлежит списку “Лучшие блоги о лидерстве 21 века”.

Прежде чем начинать…

Для прохождения этого туториала вам понадобятся 3 библиотеки:

$ pip install requests BeautifulSoup4 lxml 

Получить страничку поста

Будем парсить пост “Are You Grateful?”. Чтобы распарсить HTML-страничку с постом, сначала нужно её скачать. Это можно сделать с помощью requests , вот статья об этой библиотеке.

import requests url = 'https://www.franksonnenbergonline.com/blog/are-you-grateful/' response = requests.get(url) response.raise_for_status() print(response.text) 

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

DOCTYPE html> html lang="en-US"> head > meta charset="UTF-8" /> meta name="viewport" content="width=device-width, initial-scale=1" /> . 

Парсинг поста

У вас есть HTML страничка, но как достать оттуда заголовок поста, картинку и текст? Наконец, на сцену выходит BeautifulSoup. Сейчас вы получили HTML из response.text , но это просто строка с HTML кодом. Для работы с библиотекой BeautifulSoup нужно сделать из этой строки HTML-суп:

from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'lxml') print(soup.prettify()) 

В Python-коде суп — это новый объект с кучей возможностей. Например, теперь можно вывести HTML красиво, с отступами, с помощью метода soup.prettify() :

DOCTYPE html> html lang="en-US"> head> meta charset="utf-8"/> meta content="width=device-width, initial-scale=1" name="viewport"/> title> Are You Grateful? . 

Супом он называется исторически, вот статья об этом термине. Если вкратце, то на самом деле верстальщики иногда косячат и, например, забывают закрывать теги или оставляют какие-нибудь неисправности. Такой код на HTML стали называть tag soup . Браузеры умеют самостоятельно исправлять какие-то огрехи и делать из такого “супа” нормальный, рабочий HTML. Но если вы скачиваете страничку через requests , то браузер тут ни при чём, и вы получите такой HTML, какой написали верстальщики сайта, со всеми его ошибками.

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

soup = BeautifulSoup(response.text, 'lxml') 

Заголовок поста

Заголовок поста можно легко найти методом супа .find() . Для начала нужно узнать в какой тег этот заголовок обёрнут. В этом помогут инструменты разработчика:

Итак, тег h1 . Вот что вернёт метод .find() :

print(soup.find('h1')) # 

Это тоже суп, но уже не со всей HTML-страницей, а только с этим тегом и тегами внутри него. Заголовка поста тут нет: пост называется Are You Grateful? , а такого текста в этом теге нет. Похоже, что это не тот тег , который вы искали. Их на странице несколько и BeautifulSoup4 выдал первый, который нашёл. Это тег , который находится в самом верху страницы:

Как же найти заголовок поста, а не страницы? Можно уточнить запрос: заголовок поста лежит в теге , а тот — в :

Давайте попробуем такой запрос:

title_tag = soup.find('main').find('header').find('h1') print(title_tag) # 

Are You Grateful?

Тег нашли, а как достать его текст? Всё очень просто:

title_tag = soup.find('main').find('header').find('h1') title_text = title_tag.text print(title_text) # Are You Grateful? 

Победа, вы добрались до заголовка поста!

Картинка поста

Картинку можно найти так же: это единственный тег внутри тега . Но давайте попробуем другой подход, найдём её по классу. У картинки есть классы:

У картинки есть 3 класса, они перечислены через пробел:

attachment-post-image size-post-image wp-post-image 

Класс attachment-post-image переводится как “Картинка поста”, а значит наверняка он есть только у картинок поста. Вот как найти тег img , у которого есть такой класс:

soup.find('img', class_='attachment-post-image') # # fortunate, things to be grateful for, why you should be grateful, Frank Sonnenberg" class token comment"># size-post-image wp-post-image" height="400" sizes="(max-width: 800px) 100vw, 800px" # src="https://www.franksonnenbergonline.com/wp-content/uploads/2019/10/image_are-you-grateful.jpg" ... 

Тот же .find() , только указали параметр class_ . Нижнее подчёркивание разработчики библиотеки добавили для того, чтобы не было пересечения со словом class из Python, которое используется для создания классов.

Осталось достать адрес картинки, он лежит в аргументе src :

soup.find('img', class_='attachment-post-image')['src'] # https://www.franksonnenbergonline.com/wp-content/uploads/2019/10/image_are-you-grateful.jpg 

Домашнее задание

Осталось спарсить текст поста. Сделать это можно одним из способов выше: по классу или тегам, с помощью метода find .

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Извлечение HTML-строки из объекта bs4 в Python

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

Скопировать код

from bs4 import BeautifulSoup # Предположим, у нас есть объект BeautifulSoup – 'soup'. print(soup.prettify()) # Отформатированный HTML print(str(soup)) # HTML в виде неотформатированной строки

Детальный разбор

Разберёмся, каким образом можно извлечь содержимое HTML с использованием BeautifulSoup.

Извлечение текста и тегов

Вы можете отделить текст от тегов или извлечь определённые теги следующим образом:

Скопировать код

# Выведем только текст, исключая теги print(soup.get_text()) # Выведем содержимое конкретного тега print(soup.find('span')) # Как часто вы сталкиваетесь со span в своем "супе"?

Особенности различных методов

Помимо этого, обратите внимание на разницу в работе следующих методов:

  • soup.prettify() добавляет в код переносы строк и отступы для удобства чтения. Он предназначен для создания красивого представления кода.
  • str(soup) возвращает HTML в исходном виде, без дополнительного форматирования. Это, можно сказать, прямолинейный подход.

Обработка специальных символов

Заботьтесь о корректной кодировке, если вы работаете с необычными символами:

Скопировать код

# Преобразуем вывод в кодировку UTF-8 print(soup.prettify().encode('utf-8')) # Готовы к международному формату

Визуализация

Представьте себе строителя (��), который по чертежам (��), представляющим собой объект Beautiful Soup, строит веб-страницу:

Скопировать код

��‍♂️ Строитель: "Хм. Этот чертёж что-то прямо особенное. Понятно, это объект Beautiful Soup!" �� Чертёж: [Объект Beautiful Soup с HTML-элементами и их структурой]

Из строительных материалов получается окончательное здание (��) — это наш HTML-код:

Скопировать код

�� Готовая конструкция: ". " # И вот перед вами — объект Beautiful Soup в виде превосходной HTML-структуры!

Иль простым языком :

Скопировать код

BeautifulSoupObject -> ��‍♂️ -> �� -> 'Готовый HTML'

Это описывает процесс преобразования объекта Beautiful Soup в HTML-код.

Подсказки и советы

Навигация по HTML-структуре

Методы .contents или .children позволят вам навигировать по структуре HTML:

Скопировать код

# Дочерние элементы объекта soup print(soup.contents) # Все дочерние элементы объекта soup, рекурсивно for child in soup.children: print(child) # Когда-нибудь думали, что у супа могут быть дети?

Обращение к атрибутам

Для того чтобы получить атрибуты, вроде id , class или data-атрибуты, используйте синтаксис обращения к словарю:

Скопировать код

# Обращение к атрибуту 'id' первого элемента div print(soup.find('div')['id']) # Ищете ID для div? Вот он!

Обработка неполных тегов

Иногда теги могут быть неполными или вовсе отсутствовать. BeautifulSoup отлично справляется и с такими случаями:

Скопировать код

# Парсинг неполного HTML soup = BeautifulSoup("

Ой, а где закрывающий тег?", 'html.parser') print(soup.prettify()) # Недостающие теги найдены и добавлены.

Работа с комментариями и скриптами

Комментарии и скрипты также можно удалять и обрабатывать:

Скопировать код

from bs4 import Comment # Удаление всех комментариев comments = soup.findAll(text=lambda text: isinstance(text, Comment)) [comment.extract() for comment in comments] # До свидания, комментарии! # Поиск тегов script script_tags = soup.find_all('script') # Если они вам не по душе, просто избавьтесь от них!

Полезные ресурсы

  1. Официальная документация Beautiful Soup — основной источник информации по всем вопросам, связанным с Beautiful Soup.
  2. Учебник по Beautiful Soup: создание веб-скрейпера на Python от Real Python — отличный ресурс для тех, кто хотел бы изучить сбор данных из сети с использованием Beautiful Soup и Python.
  3. Веб-скрапинг с использованием Beautiful Soup и Requests: учебный курс на YouTube от Кори Шафера — видеокурс, в котором детально рассказывается о основах веб-скрапинга и использовании Beautiful Soup.
  4. Практическое руководство по извлечению содержимого HTML с помощью Beautiful Soup на Python от DigitalOcean — с помощью этого руководства вы сможете освоить практическое применение Beautiful Soup.
  5. Статья на Medium о способах извлечения атрибутов, текста и HTML с помощью Beautiful Soup на Towards Data Science — интересное чтение для тех, кто работает с Beautiful Soup.
  6. Краткое руководство по началу работы с Beautiful Soup — полезное руководство для начинающих разработчиков, только начинающих знакомиться с HTML-парсингом.

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

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