Дан текст внутри которого есть теги

от admin

Поиск тега по тексту

Скажите пожалуйста, как найти тег по содержащемуся в нем тексту.

Чтобы найти тег, с заданным текстом:

Если точное совпадение не нужно, то можно text=re.compile(‘Arsenal’) критерий использовать.

Чтобы ограничить найденные теги только h2 элементами и заданной подстрокой:

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

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Задачи на работу с элементами страницы в JavaScript

Некоторые видео могут забегать вперед, тк к этому месту учебника мы прошли еще не весь ES6. Просто пропускайте такие видео, посмотрите потом.

Регулярки

  • Урок №
    Введение, задач нет
  • Урок №
    Работа с регулярными
    выражениями. Глава 1.
  • Урок №
    Работа с регулярными
    выражениями. Глава 2.
  • Урок №
    Работа с регулярными
    выражениями. Глава 3.
  • Урок №
    Работа с регулярными
    выражениям. Глава 4.
  • Урок №
    Отличия
    от PHP версии

Разное

  • Урок №
    Работа
    с форматом JSON
  • Урок №
    Работа
    с куки (cookie)
  • Урок №
    Работа
    с локальным хранилищем
  • Урок №
    Анимация
    и другие эффекты

Работа с канвасом

  • Урок №
    Введение, задач нет
  • Урок №
    Основы
    работы с canvas
  • Урок №
    Продвинутая
    работа с canvas

Практика

  • урок исключен (мало материала), по аяксу скоро будет отдельный учебник (много материала)
    Работа с
    AJAX в JavaScript —>
    Работа с
    AJAX + PHP —>

Контекст

  • Урок №
    Введение, задач нет
  • Урок №
    Продвинутая
    работа с контекстом

Drag-and-Drop

  • Урок №
    новая вкладка с new.code.mu
    Доступные события
  • Урок №
    новая вкладка с new.code.mu
    Перемещение элемента по окну
  • Урок №
    новая вкладка с new.code.mu
    Перемещение на другой элемент
  • Урок №
    новая вкладка с new.code.mu
    Объект event.dataTransfer
  • Урок №
    новая вкладка с new.code.mu
    Картинка при перетягивании
  • Урок №
    новая вкладка с new.code.mu
    Вид курсора
  • Урок №
    Введение, задач нет
  • Урок №
    Основы
    работы с ООП
  • Урок №
    Наследование
    классов в JavaScript
    Продвинутая работа
    с классами на JavaScript —>
  • Урок №
    Применение
    ООП при работе с DOM
  • Урок №
    Практика
    по ООП в JavaScript
  • Тут скоро будут еще уроки
    по функциональному и прототипному
    стилю ООП.

Практика по ООП

Ваша задача: посмотрите, попробуйте повторить.

  • Урок №
    новая вкладка ютуб
    Игра 5 точек в ряд без ООП для разминки
  • Урок №
    новая вкладка ютуб
    Игра 5 точек в ряд ООП вариант
  • Урок №
    новая вкладка ютуб
    Хранение массива в локальном хранилище (предварительная теория)
  • Урок №
    новая вкладка ютуб
    Стикеры ООП (нужны основы Drag-and-Drop, выше в учебнике есть)

Практика

  • Урок №
    новая вкладка с new.code.mu
    Тип Symbol
  • Урок №
    новая вкладка с new.code.mu
    Итераторы и генераторы

Promise ES6

  • Урок №
    новая вкладка с new.code.mu
    Функции resolve reject
  • Урок №
    новая вкладка с new.code.mu
    Метод catch
  • Урок №
    новая вкладка с new.code.mu
    Цепочки промисов
  • Урок №
    новая вкладка с new.code.mu
    Перехват ошибок
  • Урок №
    новая вкладка с new.code.mu
    Promise.all
  • Урок №
    новая вкладка с new.code.mu
    Promise.race
  • Урок №
    новая вкладка с new.code.mu
    async await
  • Урок №
    новая вкладка с new.code.mu
    Загрузка картинок

Библиотека jQuery

Тк. jQuery устаревает, объявляю эти уроки не обязательными и выношу в конец учебника (так по уровню уроки середины учебника, если что). В перспективе переедет в отдельный учебник по jq.

  • Урок №
    Основы
    работы с jQuery
  • Урок №
    Манипулирование
    элементами страницы
  • Урок №
    Работа
    с набором элементов
  • Урок №
    Работа
    с событиями jQuery
  • Урок №
    Эффекты и анимация
    библиотеки jQuery
  • Урок №
    Практика на отработку
    библиотеки jQuery
  • Урок №
    Работа с
    библиотекой jQueryUI
  • Урок №
    Популярные плагины
    библиотеки jQuery

Перед решением задач изучите теорию к данному уроку.

Примеры решения задач

Задача . Изменение текста в span

Задача. Повторите поведение кнопки по нажатию на нее (она меняет текст в span):

Задача . Замена span на тег b без изменения текста

Задача. Повторите поведение кнопки по нажатию на нее (она меняет span на тег b, не изменяя при этом текст внутри тега):

Решение: просто так заменить теги, не трогая их внутреннего содержимого, невозможно. В данном случае необходимо найти внутреннее содержимое тега span, а затем заменить этот span на тег b, внутри которого будет стоять то, что было внутри span. Чтобы тег span исчез совсем, нужно поменять его outerHTML, а не innerHTML (в этом случае тег b оказался бы внутри span, а это нам не нужно по условию задачи):

Задача . На getElementsByTagName

Задача. Дан HTML код (см. под задачей). Поменяйте содержимое абзацев на их порядковый номер в коде.

Решение: создадим кнопку, по нажатию на которую будет вызываться функция func, которая выполнит указанные в условии задачи действия:

Получим теперь элементы по имени тега и переберем их циклом, используя метод getElementsByTagName:

HTML код станет выглядеть так:

Задача . На getElementsByClassName

Задача. Дан HTML код (см. под задачей). Поменяйте содержимое элементов с классом zzz на их порядковый номер в коде.

Решение: создадим кнопку, по нажатию на которую будет вызываться функция func, которая выполнит указанные в условии задачи действия:

Получим теперь элементы по имени класса и переберем их циклом, используя метод getElementsByClassName:

HTML код станет выглядеть так:

Задача . На querySelectorAll

Задача. Дан HTML код (см. под задачей). Поменяйте содержимое абзацев с классом zzz на их порядковый номер в коде.

Решение: создадим кнопку, по нажатию на которую будет вызываться функция func, которая выполнит указанные в условии задачи действия:

Получим теперь элементы с помощью селектора p.zzz (абзацы с классом zzz) и переберем их циклом, используя метод querySelectorAll:

HTML код станет выглядеть так:

Задачи для решения

Свойства innerHTML, outerHTML

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Метод getElementsByTagName

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Метод getElementsByClassName

Дан HTML код (см. под задачей). Поменяйте содержимое элементов с классом www на их порядковый номер в коде.

Метод querySelectorAll

Дан HTML код (см. под задачей). Поменяйте содержимое абзацев с классом www на их порядковый номер в коде.

Методы setAttribute, getAttribute, removeAttribute, hasAttribute

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Задачи

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Повторите страницу по данному по образцу (по ссылкам не переходите, нажмите на кнопку):

Вы можете открыть этот пример в отдельной вкладке браузера.

Закрепление пройденного

Повторите страницу по данному по образцу:

Вы можете открыть этот пример в отдельной вкладке браузера.

Повторите страницу по данному по образцу (при нажатии на кнопку текст в каждом абзаце поменяется на порядковый номер абзаца):

Вы можете открыть этот пример в отдельной вкладке браузера.

Повторите страницу по данному по образцу (при нажатии на кнопку текст в каждом абзаце поменяется — спереди добавится порядковый номер абзаца):

Вы можете открыть этот пример в отдельной вкладке браузера.

Учебник JavaScript

  • Урок №
    Задачник
    JavaScript для новичков
  • Урок №
    Основы
    языка JavaScript
  • Урок №
    Основы работы
    с массивами и объектами
  • Урок №
    Работа с конструкциями
    if-else и switch-case
  • Урок №
    Работа с циклами
    for и while
  • Урок №
    Работа
    с математическими функциями
  • Урок №
    Работа со строковыми
    функциями в JavaScript
  • Урок №
    Функции
    работы с массивами
  • Урок №
    Практика на комбинации
    стандартных функций
  • Урок №
    Основы работы
    с пользовательскими функциями
  • Урок №
    Приемы работы
    с флагами
  • Урок №
    Приемы работы
    с логическими значениями
  • Урок №
    Приемы работы
    с циклами
  • Урок №
    Приемы работы
    с массивами
  • Урок №
    Правильное использование
    пользовательских функций
  • Урок №
    Практика на
    пользовательские функции
  • Урок №
    Продвинутая работа
    с пользовательскими функциями
Читать:
Plug and play что это

Практика

Работа с DOM

  • Урок №
    Основы
    работы с DOM
  • Урок №
    Работа
    с элементами HTML страницы
  • Урок №
    Работа
    с датами в JavaScript
  • Урок №
    Работа
    с таймерами в JavaScript
  • Урок №
    Продвинутая
    работа с событиями
  • Урок №
    Продвинутая
    работа с DOM
  • Урок №
    Работа
    с метриками
  • Урок №
    Работа
    с метриками для window
  • Урок №
    Основы работы
    с объектом Event
  • Урок №
    Продвинутая работа
    с объектом Event
  • Урок №
    Разные
    полезные темы
  • Урок №
    новая вкладка с new.code.mu
    Работа с узлами

Практика

  • Урок №
    Практика
    JavaScript для новичков
  • Урок №
    Практика
    минипроекты JavaScript
  • Урок №
    новая вкладка ютуб
    Разбор квадратного календарика
  • Урок №
    новая вкладка ютуб
    Разбор игры найди случайное число в таблице

Некоторые продвинутые вещи

  • Урок №
    Анонимные
    функции и замыкания
  • Урок №
    Некоторые продвинутые
    функции JavaScript
  • Урок №
    Нюансы
    работы с событиями
  • Урок №
    Нововведения
    в ES6 для новичков
  • Урок №
    новая вкладка с new.code.mu
    Коллекция Set
  • Урок №
    новая вкладка с new.code.mu
    Коллекция Map

Рекомендованное ES6

Некоторые видео могут забегать вперед, тк к этому месту учебника мы прошли еще не весь ES6. Просто пропускайте такие видео, посмотрите потом.

Дан текст внутри которого есть теги

Как использовать Python и Xpath для поиска данных в html

Скриншот сайта цитат Звездных войн<br>

Введение в написание выражений XPath

Скриншот сайта цитат Звездных войн<br>

  1. // — это означает поиск по всему HTML-документу (начните с корня сайта и найдите все, что соответствует искомому выражению)
  2. p — это HTML-тег, который содержит другой тег с текстом, который мы ищем.
  3. strong — это HTML-тег, который на самом деле содержит текст, который мы ищем
  4. text() — это получение текстового узла.

Скриншот сайта цитаты из

  1. [] — вы можете видеть, что часть выражения заключена в квадратные скобки. Это называется «предикатом» и используется для фильтрации узлов на основе критериев, указанных внутри него. В этом случае он будет отфильтровывать узлы, которые обычно выводит « //p ».
  2. contains() — это ищет первый аргумент для случаев, когда второй аргумент присутствует. В этом случае мы ищем весь текст с надписью «use».

  1. not() — принимает указанное логическое условие и возвращает значение «False».

Скриншот сайта цитаты из

  1. starts-with — работает так же, как « contains », за исключением того, что на этот раз мы смотрим на начало узлов, указанных первым аргументом, для подстроки, предоставленной вторым аргументом.
  2. @ — это как выбрать «атрибут» с помощью XPath. Атрибуты представляют собой фрагменты HTML после открывающего тега, который изменяет функцию исходного элемента.

  1. [@something=“something” ] — здесь вместо того, чтобы искать значение атрибута, которое содержит или начинается с чего-то, мы прямо указываем в предикате, что хотим точное совпадение.
  2. descendant::node() — позволяет нам искать все узлы, которые идут после предыдущего тега.

Снимок экрана сайта цитат Звездных войн<br>

Методы .find_all() и .find*() модуля BeautifulSoup4 в Python.

Все виды поиска по HTML-документу в BeautifulSoup4.

  • name — фильтр по имени HTML-тега, может быть:
    • строкой с именем HTML-тега,
    • списком с несколькими именами HTML-тегов,
    • объектом регулярного выражения,
    • значением bool ,
    • функцией.
    • .find_all() — список объектов HTML-документа или пустой список [] .
    • .find() — объект элемента HTML-документа или None .

    Описание метода .find_all() :

    name , как объект bool :
    Аргумент **kwargs .
    Аргумент attrs .
    Аргумент string .
    Аргумент recursive .
    Аргумент limit .
    • .find_parents() и .find_parent() ищут совпадения в родительских тегах.
    • .find_next_siblings() ищет все совпавшие последующие одноуровневые элементы.
    • .find_next_sibling() ищет первый совпавший последующий одноуровневый элемент.
    • .find_previous_siblings ищет все совпавшие предшествующие одноуровневые элементы.
    • .find_previous_sibling ищет первый совпавший предыдущий одноуровневый элемент.
    • .find_all_next() ищет все совпавшие последующие элементы.
    • .find_next() ищет следующий совпавший элемент.
    • .find_all_previous ищет все совпавшие предшествующие элементы.
    • .find_previous() ищет предыдущий совпавший элемент.
    .find_parents() :
    .find_parent() :
    .find_next_siblings() :
    .find_next_sibling() :
    .find_previous_siblings() :
    .find_previous_sibling() :
    .find_all_next() :
    .find_next() :

    Python. Начало requests + bs4 (WebScrapping) [5]

    Получаем User-Agent.

    • Для этого заходим в Mozilla Firefox, на любой сайт.
    • Открываем меню разработчика (F12).
    • Перезагружаем страницу.
    • Заходим в графу сеть, и ищем первый GET запрос.

    Парсим html код с помощью BeautifulSoup.

    • Текст, который будем парсить.
    • Сам парсер.
    • тег — тег нужного нам элемента (div, span, a, input)
    • класс — класс нужного элемента
    • idid элемента.

    BeautifulSoup — search by text inside a tag

    Right. According to the Docs, soup uses the match function of the regular expression, not the search function. So I need to provide the DOTALL flag:

    Alright. Looks good. Let’s try it with soup

    Edit

    My solution based on geckons answer: I implemented these helpers:

    Now, when I want to find the element above, I just run find_by_text(soup, ‘Edit’, ‘a’, href=’/customer-menu/1/accounts/1/update’)

    4 Answers 4

    The problem is that your <a> tag with the <i> tag inside, doesn’t have the string attribute you expect it to have. First let’s take a look at what text=»» argument for find() does.

    NOTE: The text argument is an old name, since BeautifulSoup 4.4.0 it’s called string .

    Although string is for finding strings, you can combine it with arguments that find tags: Beautiful Soup will find all tags whose .string matches your value for string. This code finds the tags whose .string is “Elsie”:

    Now let’s take a look what Tag ‘s string attribute is (from the docs again):

    If a tag has only one child, and that child is a NavigableString, the child is made available as .string:

    If a tag contains more than one thing, then it’s not clear what .string should refer to, so .string is defined to be None:

    This is exactly your case. Your <a> tag contains a text and <i> tag. Therefore, the find gets None when trying to search for a string and thus it can’t match.

    How to solve this?

    Maybe there is a better solution but I would probably go with something like this:

    I think there are not too many links pointing to /customer-menu/1/accounts/1/update so it should be fast enough.

    BeautifulSoup — поиск по тексту внутри тега

    Right. Согласно Docs, суп использует функцию соответствия регулярного выражения, а не функцию поиска. Поэтому мне нужно предоставить флаг DOTALL:

    Хорошо. Выглядит неплохо. Пусть попробует его с супом

    Edit

    Мое решение, основанное на ответах geckons: Я реализовал эти помощники:

    Теперь, когда я хочу найти элемент выше, я просто запускаю find_by_text(soup, ‘Edit’, ‘a’, href=’/customer-menu/1/accounts/1/update’)

    2 ответа

    Проблема заключается в том, что тэг <a> с тегом <i> внутри, не имеет атрибута string , который вы ожидаете от него. Сначала рассмотрим, что делает аргумент text=»» для find() .

    ПРИМЕЧАНИЕ. Аргумент text — это старое имя, так как BeautifulSoup 4.4.0 называется string .

    Хотя строка предназначена для поиска строк, вы можете комбинировать ее с аргументы, которые обнаруживают теги: Beautiful Soup найдет все теги, чьи .string соответствует вашему значению для строки. Этот код находит теги чья .string — «Elsie»:

    Теперь посмотрим, что атрибут Tag string (снова из docs):

    Если тег имеет только одно дочернее устройство, а этот ребенок является навигационной строкой, Ребенок доступен как .string:

    Если тег содержит несколько вещей, то неясно, что .string должно ссылаться, поэтому .string определяется как None:

    Это именно ваш случай. Тег <a> содержит тег и <i> . Таким образом, find пытается получить None при попытке поиска строки и, следовательно, не может совпадать.

    Как это решить?

    Может быть, есть лучшее решение, но я бы, вероятно, пошел с чем-то вроде этого:

    Я думаю, что не слишком много ссылок, указывающих на /customer-menu/1/accounts/1/update , поэтому он должен быть достаточно быстрым.

Похожие статьи