Как извлечь значения атрибутов идентификатора элемента из HTML
-
21-08-2019 - |
Вопрос
Я пытаюсь разобраться с накладными расходами, связанными с 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, как в этом вопрос