В настоящее время я работаю над сценарием для извлечения некоторой базовой информации со страницы HTML. В частности, я пытаюсь получить некоторую информацию об артистах от allmusic.com. Я пишу этот сценарий в файле node.js, используя jQuery для фактической очистки, и работаю в определенной степени, используя примеры из этого сообщения в блоге .
То, что я пытаюсь сделать, - это запустить поиск по популярному исполнителю, а затем сохранить некоторую основную информацию о первом результате, который почти полностью будет исполнителем, которого я ищу. Я могу извлечь нужную таблицу, используя приведенный ниже код, но не могу понять, как получить первые пару td
элементов из HTML, что мне действительно нужно сделать. Мой код node.js выглядит следующим образом:
var request = require('request'),
jsdom = require('jsdom');
request({ uri:'http://allmusic.com/search/artist/lady+gaga' }, function (error, response, body) {
jsdom.env({
html: body,
scripts: [
'http://code.jquery.com/jquery-1.5.min.js'
]
}, function (err, window) {
var $ = window.jQuery;
// jQuery is now loaded on the jsdom window created from 'agent.body'
var search = $('.search-results').html();
if(search != null){
//gah what can i do here?!?
}
});
});
Ниже приведен фрагмент HTML-кода, так что вам не нужно искать его самостоятельно:
<table class="search-results" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<th class="relevance">
<a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:relevance-asc" title="order by relevance">Relevance</a>
</th>
<th width="10px"> </th>
<th>
<a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:name-asc" title="order by name">Name</a>
</th>
<th width="75px">
<a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:genre-asc" title="order by genre">Genre</a>
</th>
<th width="200px">Years Active</th>
</tr>
ACTUAL RELEVANT STUFF THAT I WANT ARE BELOW
<tr>
<td class="relevance text-center">
<div class="bar" style="width:100%" title="100%"></div>
</td>
<td class="text-center"></td>
<td><a href="http://www.allmusic.com/artist/lady-gaga-p1055684">Lady Gaga</a></td>
<td>Pop/Rock</td> //SPECIFICALLY THIS
<td>00s</td>
</tr>
В этой таблице есть еще много записей, но это первый результат. Можно ли создать массив из тд или что-то в этом роде и просто получить правильный индекс? Это должен быть одинаковый индекс для каждого артиста, если я всегда получу первый результат.
Если это невозможно, есть ли другие способы достижения моей цели? В качестве альтернативы, есть ли лучшие способы сделать то, что я пытаюсь сделать с node.js? Я посмотрел на кучу разных вариантов, и это казалось самым простым.
С наилучшими пожеланиями,
Сами