Как извлечь значения атрибутов идентификатора элемента из HTML

StackOverflow https://stackoverflow.com/questions/362674

Вопрос

Я пытаюсь разобраться с накладными расходами, связанными с ASP.NET автоматическим присвоением имен серверным элементам управления.У меня есть страница, которая содержит 7000 строк HTML, отрисованных из сотен вложенных ASP.NET элементов управления, многие из которых имеют атрибуты id / name длиной в сотни символов.

В идеале мне бы хотелось чего-то, что извлекало бы каждое значение атрибута HTML, начинающееся с "ctl00", в список.Функция поиска регулярных выражений в Notepad ++ была бы идеальной, если бы только я знал, каким должно быть регулярное выражение?

В качестве примера, если HTML-код является:
<input name="ctl00$Header$Search$Keywords" type="text" maxlength="50" class="search" />

Я бы хотел, чтобы результат был чем-то вроде:
name="ctl00$Заголовок$Поиска$Ключевые слова"
Более расширенный поиск может также включать название элемента (например,тип управления):
input|name="ctl00$Заголовок$ Поиск$Ключевые слова"

Чтобы справиться как с атрибутами Id, так и Name, я просто перезапущу поиск по Id вместо Name (т. Е.Мне не нужно что-то, что будет искать и то, и другое одновременно).

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

Это было полезно?

Решение 3

Отвечая на мой собственный вопрос, самый простой способ сделать это - использовать BeautifulSoup, анализатор Python "грязного HTML", слоган которого:

"Ты не писал эту ужасную страницу.Вы просто пытаетесь извлечь из этого какие-то данные.Прямо сейчас вам на самом деле все равно, как должен выглядеть HTML.Как и этот анализатор. "

Это работает, и оно доступно здесь - http://crummy.com/software/BeautifulSoup

Другие советы

Быстро и грязно:

Поиск

\w+\s*=\s*"ctl00[^"]*"

Это будет соответствовать любому тексту, который выглядит как атрибут, например name="ctl00test" или attr = "ctl00longer text".Он не будет проверять, действительно ли это происходит внутри HTML-тега - это немного сложнее сделать и, возможно, не нужно?Он также не будет проверять наличие экранированных кавычек в имени тега.Как обычно с регулярными выражениями, требуемая сложность зависит от того, чему именно вы хотите соответствовать и как выглядит ваш ввод...

"7000"?"Сотни"?Боже милостивый.

Поскольку вы просто просматриваете исходный код в текстовом редакторе, попробуйте это.../(id|имя)="ct[^"]*"/

Я предлагаю xpath, как в этом вопрос

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top