Поиск тега по тексту
Скажите пожалуйста, как найти тег по содержащемуся в нем тексту.
Чтобы найти тег, с заданным текстом:
Если точное совпадение не нужно, то можно 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 - Урок №
Функции
работы с массивами - Урок №
Практика на комбинации
стандартных функций - Урок №
Основы работы
с пользовательскими функциями - Урок №
Приемы работы
с флагами - Урок №
Приемы работы
с логическими значениями - Урок №
Приемы работы
с циклами - Урок №
Приемы работы
с массивами - Урок №
Правильное использование
пользовательских функций - Урок №
Практика на
пользовательские функции - Урок №
Продвинутая работа
с пользовательскими функциями
Практика
Работа с 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

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

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


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

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


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


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



Методы .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)
- класс — класс нужного элемента
- id — id элемента.

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 , поэтому он должен быть достаточно быстрым.