2015-07-18 3 views
0

У меня есть HTML-документ, который я хотел бы проанализировать. Я пытаюсь использовать cheerio для анализа HTML-файла.Анализ HTML-файла с использованием cheerio

<ul data-reactid=".0.1.0.0.1.1.0.0.0.0.1.0"> 
    <li class="_1ht1 _1ht2" data-reactid=".0.1.0.0.1.1.0.0.0.0.1.0.1:$user=xyz"> 
     . 
     . 
     . 
     . 
     <span data-reactid=".0.1.0.0.1.1.0.0.0.0.1.0.1:$user=xyz.0.0.$right.0.0.1.$left.0.1:0"> 
      My Random Text 
     </span> 
    </li> 
</ul> 

С моей HTML Я пытаюсь извлечь первый экземпляр уль тег с данными reactid =». 0.1.0.0.1.1.0.0.0.0.1.0"

В том, что очень первый тег li, я хочу извлечь пользователя, в этом случае xyz. После этого я хочу найти текст в классе span, упомянутом в коде.

Через Cheerio я попробовал следующее:

var cheerio = require('cheerio'), 
fs = require('fs'); 

fs.readFile('index.html', 'utf8', dataLoaded); 

function dataLoaded(err, data) { 
    $ = cheerio.load(data); 
    console.log("Trying out " + JSON.stringify($("<ul data-reactid=\".0.1.0.0.1.1.0.0.0.0.1.0\">").data())); 
} 

Он печатает Trying out {"reactid":".0.1.0.0.1.1.0.0.0.0.1.0"} Как получить значение внутри HTML?

Примечание: хуг динамичен и это изменит

+0

Итак, вы хотите '<уль данных reactid = \» 0.1 .0.0.1.1.0.0.0.0.1.0 \ ">' как вывод, правильно? – Patel

+0

@Patel Нет Я хочу извлечь свой случайный текст. Однако даже содержимое html под тегом ul не работает – user1692342

ответ

1

Я думаю, что это будет работать для вас, если я правильно понял ваш вопрос:.

var myDataReactId = '.0.1.0.0.1.1.0.0.0.0.1.0' 
var firstLi = $("ul[data-reactid = '" + myDataReactId + "'] li")[0]; 
//console.log(firstLi); 
var user = $(firstLi).data('reactid'); 
$(firstLi).find("span[data-reactid*='" + user + "']").text(); 
+0

Вы почти правы! Не могли бы вы объяснить, что делает data-reactid *? в чем смысл *? Я думаю, что в настоящее время он ищет какой-либо тег span с data-reactid, который содержит в себе переменную пользователя? Я не ошибаюсь? – user1692342

+1

@ user1692342 Да, он ищет тег 'span' (который * содержит * пользовательскую переменную) * внутри *, что * конкретный *' li'. – Patel

+0

спасибо! У меня сейчас работает! :) Это работает в моем модуле js узла, однако я столкнулся с проблемой с nodewebkit. Не могли бы вы также проверить этот мой вопрос :) http: // stackoverflow.ком/вопросы/31489279/неперехваченные ошибки, не может-найти-модуль-Cheerio-nodewebkit – user1692342

0

Попробуйте это. В основном это превращает ваш HTML в нечто, с чем может работать jQuery, и затем он находит несортированный список, конечно, вы можете сделать поиск более конкретным. Используя .data(), он извлекает значение атрибута data-reactid.

reactid = $($(data).find('ul>li>span')).data('reactid'); 
+0

С этим я получу значение .0.1.0.0.1.1.0.0.0.0.1.0, чего я не спросил. Я уже знаю, как получить эту ценность. Я пытаюсь найти значение в теге span под тегом ul. Я попробовал этот console.log ($ (data) .find ('li._1ht1 _1ht2'). Data ('reactid')); & it показывает как undefined – user1692342

+0

Проверьте выпуск, который я сделал, я использую селектор child, чтобы найти 'span'. Надеюсь, это сработает. –

+0

Возможно, моя формулировка вопроса неправильная, и вы не смогли ее получить. Я не ищу первый пролет внутри класса ul. Начиная с первого класса ul, я хочу посмотреть первый тег li, извлечь данные-reidid и затем искать текст внутри класса span с помощью data-reactid, полученного из тега li – user1692342

0

Проблема с моим первым ответом является то, что я на самом деле не найти элемент, который вы хотели бы, чтобы извлечь из reactid. С некоторыми js fiddling я смог собрать что-то вместе, похожее на ваш сценарий. Заметил в скрипке, что я использую .html(). Без дальнейших церемоний, здесь мы идем: http://jsfiddle.net/0r5k9egu/. Запуск скрипку и в консоли вы должны увидеть .0.1.0.0.1.1.0.0.0.0.1.0.1:$user=xyz.0.0.$right.0.0.1.$left.0.1:0

+0

Да, я могу видеть, что вывод, Возможно ли получить значение внутри диапазона, которое является моим случайным текстом в этом случае. Не могли бы вы вкратце объяснить, как работает ваш код? Я не могу пройти через – user1692342

+0

Я пробовал это с помощью своего Html-файла, и я не смог заставить его работать. В моем html-файле есть много тегов span внутри тега li! Также есть несколько тегов ul до того, что я упоминал. Мне нужно будет искать в теге ul с этим конкретным идентификатором реакции – user1692342

Смежные вопросы