Я пытаюсь сделать что-то, что кажется очень простым. Я пытаюсь проверить, найдена ли в исходном коде страницы конкретная строка c, например «нет в наличии». Однако меня не волнует, содержится ли строка в комментарии html или javascript. Поэтому, прежде чем приступить к поиску, я хотел бы удалить оба этих элемента с помощью регулярных выражений. Это код, который я использую.
urls.each do |url|
response = HTTP.get(url)
if response.status.success?
source_code = response.to_s
# Remove comments
source_code = source_code.gsub(/<!--(.*?)-->/su, '')
# Remove scripts
source_code = source_code.gsub(/<script(.*?)<\/script>/msu, '')
if source_code.match(/out of stock/i)
# Flag URL for further processing
end
end
end
end
Это работает для 99% всех URL-адресов, с которыми я его пробовал, но некоторые URL-адреса стали проблемными c. Когда я пытаюсь использовать эти регулярные выражения в исходном коде, возвращаемом для URL-адреса «https://www.sunski.com», я получаю следующее сообщение об ошибке:
Encoding::CompatibilityError (incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string))
Страница определенно UTF-8 закодировано, поэтому я не совсем понимаю сообщение об ошибке. Несколько человек по переполнению стека рекомендовали использовать комментарий # encoding: UTF-8
в верхней части файла, но это не сработало.
Если бы кто-нибудь мог помочь с этим, это было бы очень признательно. Спасибо!