Поддерживает ли метод BeautifulSoup .select () использование регулярного выражения?

Предположим, что я хочу проанализировать html с помощью BeautifulSoup, и я хотел использовать селектора css для поиска определенных тегов. Я бы «одолел» его, сделав

from bs4 import BeautifulSoup soup = BeautifulSoup(html) 

Если бы я хотел найти тег, чей атрибут «id» имеет значение «abc», я могу сделать

 soup.select('#abc') 

Если бы я хотел найти все «дочерние» теги под нашим текущим тегом, мы могли бы сделать

 soup.select('#abc a') 

Но теперь предположим, что я хочу найти все теги «a», чьи атрибуты «href» имеют значения, которые заканчиваются на «xyz», я хотел бы использовать регулярное выражение для этого, я надеялся что-то вроде строк

 soup.select('#abc a[href] = re.compile(r"xyz$")') 

Кажется, я не могу найти ничего, что говорит, что метод BeautifulSoup .select () будет поддерживать регулярное выражение.

One Solution collect form web for “Поддерживает ли метод BeautifulSoup .select () использование регулярного выражения?”

Функция soup.select() поддерживает только синтаксис CSS; регулярные выражения не являются частью этого.

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

 soup.select('#abc a[href$="xyz"]') 

См. Документацию по выбору атрибутов CSS в MSDN.

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

 for element in soup.select('#abc'): child_elements = element.find_all(href=re.compile('^http://example.com/\d+.html')) 

Обратите внимание, что, поскольку документация element.select() гласит :

Это удобство для пользователей, которые знают синтаксис селектора CSS. Вы можете сделать все это с помощью API Beautiful Soup. И если CSS-селектор – это все, что вам нужно, вы можете использовать lxml напрямую: он намного быстрее, и он поддерживает больше селекторов CSS. Но это позволяет комбинировать простые селектора CSS с API Beautiful Soup.

Акцент мой .

  • WTForms: Как выбрать опции в SelectMultipleField?
  • Почему select.select () работает с файлами дисков, но не epoll ()?
  • Python MySQL - SELECT работают, но не DELETE?
  • pyodbc - Как выполнить оператор select с использованием переменной для параметра
  • Python: select () не сигнализирует все входные данные из канала
  • Как запросить для всех групп типа 'foo', которые содержат user_x? (таблица «многие-ко-многим»)
  • Python - лучший язык программирования в мире.