Я не думаю, что есть способ очистить практически что-нибудь "динамически". У вас нет возможности обнаружить все возможные способы, которыми люди могут написать html, указав вам цену.
То, что вы могли бы сделать, но я не думаю, что это было бы так просто, это обучить модели машинного обучения обнаружению цены в большинстве случаев . Но это, вероятно, выходит за рамки этого вопроса.
Другой способ, которым вы можете попробовать, - это просто посмотреть на большинство сайтов и добавить несколько алгоритмов "generi c" для очистки их сайтов. Если один не работает, вы просто пытаетесь с другим, пока не преуспеете или не сдадитесь. Таким образом, избегая жесткого кодирования имен классов и прочего, вы, по крайней мере, очистите все сайты, которые имеют структуру, аналогичную той, что есть в ваших обобщенных c скребках.
Один способ (но я верю вы могли бы подумать о других, более эффективных способах) Я хотел бы подойти к реализации алгоритма скребка «generi c», чтобы получить список регулярных выражений класса цен для сопоставления и попробовать их все, пытаясь затем проверить результаты, которые вы получаете внутри текста html (например, есть ли внутри текста какое-либо число? Содержит ли оно такие символы, как €, $, ..? et c.). Я бы начал с чего-то вроде .*price.*
и других подобных регулярных выражений, которые вы можете просто найти, просмотрев большинство сайтов.
Вы наверняка столкнетесь с некоторыми сайтами, о которых вы даже не думали. Затем вы можете отправить себе эту информацию (когда на клиенте вы обнаружите, что не можете найти цену на сайте), и вы можете посмотреть сайт самостоятельно и добавить дополнительные регулярные выражения в свой список (которые, вероятно, потребуется обновить сервер). и загружается на ваш клиент каждый раз, когда он обновляется), если это решает проблему, или добавьте другой алгоритм скребка, или сделайте один из ваших предыдущих более универсальным c и работайте с этим вариантом использования тоже (но это требует нового выпуска приложения) .
Извините, если этот ответ не очень конкретен c, но ваш вопрос был настолько широким, что было почти невозможно его конкретизировать c.
PS: Не уверен если это лучший подход (возможно, какой-то синтаксический анализатор лучше подходит для этого), но одно регулярное выражение, которое я мог бы быстро придумать, соответствует всем 3 вашим примерам, где <[^>]*class=".*price.*"[^>]*>([^<]*)<
. Возможно, есть что-то более умное, но с помощью этого регулярного выражения вы автоматически получите текст внутри элемента html в первой группе захвата. Чем вам нужно просто санировать его (удалить ненужные символы и т. Д. c) и, возможно, проверить его.