Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Проблема в навигации по странице (https://javascript.ru/forum/node-js-io-js/66985-problema-v-navigacii-po-stranice.html)

arealhz 21.01.2017 21:06

Проблема в навигации по странице
 
Собственно вот такой простой кусочек кода неожиданно поставил в тупик. С программированием сталкиваюсь крайне редко, хоть в институте и проходил в достаточной степени.



Код:

var cheerio = require('cheerio'),
    $ = cheerio.load('<html><head></head><body><ul id="fruits"><li class="apple">apple text</li><li class="orange">orange <a href="b">text inner</a> text outer</li><li class="pear">Pear</li></ul></body></html>', {
        ignoreWhitespace: true,
        xmlMode: false});
        console.log($('#fruits > li.orange > a').contents().text());

Собственно весь вопрос в том что бы организовать нормальную навигацию по куску html-кода. Как я могу получить отдельно текст "orange" стоящий до ссылки, а затем отдельно получить текст "text outer" стоящий после ссылки? Мне кажется я уже применил все возможные методы с описания https://github.com/cheeriojs/cheerio...ster/Readme.md по этому адресу. :(

destus 21.01.2017 21:31

arealhz,
$('#fruits > li.orange').contents().not('a').each(function(){
console.log($(this).text().trim())
});

arealhz 21.01.2017 22:07

Спасибо тебе добрый человек! :) Получить доступ к внутренним элементам через отбрасывание ссылок при помощи специального модификатора мне не пришло почему-то в голову :(
Спасибо за очень оперативную и квалифицированную помощь! :)

Gh. 28.03.2017 04:29

Возникла проблема с парсером.

var request = require('request');
var cheerio = require ('cheerio');
url='https://www.premierleague.com/players/3170/Fraser-Forster/stats?se=54'
request ({url, method: 'GET', encoding: 'binary'},	
function (err,res,body) {
if (err) throw err; 
setTimeout ( function () {
var $=cheerio.load(body);
var name=$("div.name").text();
var team=$("div.info").first().text();
var position=$("div.info").last().text();
var games=$("div.topStatList").text();
console.log(name);
console.log(team);
console.log(position);
console.log(games);
},100)});

Изначально, заходя на страницу со статистикой игрока https://www.premierleague.com/player...-Forster/stats отображается общая статистика за все годы карьеры, если в выпадающем списке выбрать последний сезон, то к ссылке добавляется ?se=54, с которой я граблю. Но если пройти по ссылке, то видно что изначально подгружается общая статистика и только потом за последний сезон, который мне и нужен.
Так и мой код загружает первоначальную ОБЩУЮ статистику за все сезоны, а не за последний.
Пробовал таймер ставить- не помогает.
Хотел перед загрузкой данных передать атрибуту data-option-id значение 54. Но ничего не происходит. Помогите решить проблему.

Alexandroppolus 28.03.2017 09:04

Gh.,
ответил в другой теме http://javascript.ru/forum/dom-windo...ya-filtra.html

если повезет, то cheerio вообще не понадобится.


Часовой пояс GMT +3, время: 09:32.