2016-11-13 2 views
0

Я пытаюсь получить текст из «а» тега в каждой записи этой страницыПолучение новости описание с Cheerio

https://hn.algolia.com/?query=apple&sort=byPopularity&prefix&page=0&dateRange=all&type=story

Я уже разобрано несколько веб-страниц, но я У меня проблемы с этим, вот мой код.

var cheerio = require('cheerio'); 
var request = require('request'); 

request({ 
    method: 'GET', 
    url: 'https://hn.algolia.com/?query=apple&sort=byPopularity&prefix&page=0&dateRange=all&type=story' 
}, function(err, response, body) { 
if (err) return console.error(err); 

// Tell Cherrio to load the HTML 
$ = cheerio.load(body); 
// list = []; 
// $('div[id="item-main"]').each(function(){ 
// var href = $(this).find('div > div').attr('h2'); 
// list.push(h2); 
// }); 
$('item-title-and-infos').each(function() { 
    var href = $('h2', this).attr('href'); 
    if (href.lastIndexOf('/') > 0) { 
     console.log($('a', this).text()); 
    } 
}); 
}); 

Спасибо.

ответ

0

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

Просто console.log тело по вашему запросу, и вы увидите, как somethig:

<!DOCTYPE html> 
<html ng-app='HNSearch'> 
<head ng-controller='HeadCtrl'> 
... 
links and meta 
... 
</head> 
<body> 
<div id='main' ng-cloak role='main' ui-view> 

! NO CONTENT HERE ! IT WILL BE LOADED AFTER 

</div> 
<script src="https://d3nb9u6x572n0.cloudfront.net/assets/application-70dfa2f5ecb75bc8dfaa8729257bcbf1.js"></script> 
</body> 
</html> 

Если вы проверяете в Интернете с помощью Google Chrome, вы увидите, что эта связь называется после:

https://uj5wyc0l7x-dsn.algolia.net/1/indexes/Item_production/query?x-algolia-api-key=8ece23f8eb07cd25d40262a1764599b1&x-algolia-application-id=UJ5WYC0L7X&x-algolia-agent=Algolia%20for%20AngularJS%203.7.5 

Итак, наконец я нашел это решение, которое может НЕр вам:

request.post({ 
    url:'https://uj5wyc0l7x-dsn.algolia.net/1/indexes/Item_production/query?x-algolia-api-key=8ece23f8eb07cd25d40262a1764599b1&x-algolia-application-id=UJ5WYC0L7X&x-algolia-agent=Algolia%20for%20AngularJS%203.7.5', 
    body:'{"params":"query=apple&hitsPerPage=20&minWordSizefor1Typo=5&minWordSizefor2Typos=9&advancedSyntax=true&ignorePlurals=false&tagFilters=%5B%22story%22%5D&numericFilters=%5B%5D&page=0&queryType=prefixLast&typoTolerance=true&restrictSearchableAttributes=%5B%5D"}', 
    gzip:true, 
    headers:{ 
     accept:'application/json', 
     "Accept-Encoding":"gzip, deflate, br", 
     "Accept-Language":"es-ES,es;q=0.8", 
     "Cache-Control":"no-cache", 
     Connection:"keep-alive", 
     "Content-Length":258, 
     "content-type":"application/x-www-form-urlencoded", 
     Host:"uj5wyc0l7x-dsn.algolia.net", 
     Origin:"https://hn.algolia.com", 
     Pragma:"no-cache", 
     Referer:"https://hn.algolia.com/?query=apple&sort=byPopularity&prefix&page=0&dateRange=all&type=story", 
     "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 
    } 
}, 
function (err,res,body) { 
    console.log(body); 
}); 

Теперь тело является огромным JS ON со всеми данными. Я надеюсь, это поможет вам.

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