ruk nokogiri restclient для очистки переменной javascript - PullRequest
0 голосов
/ 18 апреля 2011

Я использую restclient и nokogiri для анализа html-кода, который прекрасно работает, но в переменной js (jquery) хранится один фрагмент информации, который мне нужно вернуть, и я не уверен, как его проанализировать. Я могу использовать Nokogiri для анализа блока javascript, но мне нужно одно его подмножество, которое, вероятно, просто, но я не уверен, как это сделать. Я, возможно, мог бы это откорректировать, но я предполагаю, что есть более простой способ просто запросить это с помощью JS.

@resource = RestClient.get 'http://example.com'

doc = Nokogiri::HTML(@resource)

doc.css('script').each do |script|
    puts script.content
end

Что я пытаюсь получить:

        <script type="text/javascript">
            $(function(){
                //this is it
                $.Somenamespace.theCurrency = 'EUR';
                //a lot more stuff

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

не уверен, подходит ли это, но вы можете получить его следующим образом:

irb (основной): 017: 0>

string
=> "<script type=\"text/javascript\">    $(function(){$.Somenamespace.theCurrency = \"EUR\"}); "

irb (основной): 018: 0>

string.scan(/\$\.Somenamespace\.(.*)}\);/)
=> [["theCurrency = \"EUR\""]]
1 голос
/ 18 апреля 2011

Nokogiri - это парсер XML и HTML.Он не анализирует CDATA или текстовое содержимое узлов, но может дать вам содержимое, позволяя вам использовать синтаксический анализ строк или регулярное выражение для получения нужных данных.

В случае Javascript, если этовстроенный в страницу, то вы можете получить text родительского узла.Часто это просто:

js = doc.at('script').text

, если в блоке <head> страницы есть обычный тег <script>.Если есть несколько тегов сценария, вам необходимо расширить средство доступа для получения нужного узла, а затем обработать его.

Это становится более захватывающим, когда сценарии загружаются динамически, но вы все равно можете получить данные, проанализировав URLиз параметра src сценария, затем его извлечения и повторной обработки.

Иногда Javascript внедряется в ссылки других тегов, но это просто еще одно вращение в предыдущих двух методах для получения сценария и обработкиэто.

...