Мне нравится анализировать HTML с регулярными выражениями. Я не пытаюсь разбирать идиот HTML, который намеренно нарушен. Этот код является моим основным парсером (версия Perl):
$_ = join "",; tr/\n\r \t/ /s; s/\n/>\n/g; s/\n ?\n/\n/g;
s/^ ?\n//s; s/ $//s; print
Он называется htmlsplit, разбивает HTML на строки, с одним тегом или фрагментом текста в каждой строке. Затем линии могут быть обработаны другими текстовыми инструментами и сценариями, такими как grep , sed , Perl и т. Д. Я даже не шучу :) Наслаждайтесь.
Достаточно просто переписать мой скрипт Perl-all-first Perl в приятную поточную вещь, если вы хотите обрабатывать огромные веб-страницы. Но это действительно не обязательно.
Бьюсь об заклад, я заберусь для этого.
Против моего ожидая, что это получило некоторые upvotes, поэтому я предлагаю несколько правильных выражений:
/(<.*?>|[^<]+)\s*/g # get tags and text
/(\w+)="(.*?)"/g # get attibutes
Они хороши для XML / XHTML.
С небольшими вариациями он может справиться с беспорядочным HTML ... или сначала конвертировать HTML -> XHTML.
Лучший способ записи регулярных выражений - в Lex / Yacc стиль, а не непрозрачные однострочные или прокомментированные многострочные чудовища. Я не делал этого здесь; эти им едва ли нужны.
Вы можете подключить свои пользовательские файлы к тому и дополнительно определить набор команд для запуска при запуске pod (см. здесь ), чтобы скопировать файлы на их целевой путь.
Вы, конечно, также должны запустить команду, которая запускает вашу службу, в дополнение к тем, которые копируют ваши файлы.
Одним из способов было бы установить 1 или более томов в нужные места в контейнере, казалось бы, /web/static
. Это, однако, полностью перезаписало бы все, поэтому вам нужно будет предоставить все файлы, а не только те, которые вы хотите перезаписать.
Пример:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- image: dex:2.10.0
name: dex
volumeMounts:
- mountPath: /web/static # the mount location within the container
name: dex-volume
volumes:
- name: dex-volume
hostPath:
path: /destination/on/K8s/node # path on host machine
Существует несколько типов типы хранилища для разных поставщиков облачных вычислений, посмотрите на https://kubernetes.io/docs/concepts/storage/volumes/ и посмотрите, есть ли что-то более специфичное для вашей среды, а не для хранения на диск.
Для чего это важно, создание собственного изображения, вероятно, будет самым простым решением.