J'ai fait un script très simple qui gratte un site de recettes pour obtenir le titre, le temps de préparation et les ingrédients. Tout fonctionne bien sauf que le script n'est pas capable de gratter chaque page de mes tableaux. Parfois j'en ai 4, parfois 2, parfois même 0 ...Cheerio n'attend pas que le corps se charge
Il semble que le script n'attend pas que le corps soit complètement chargé. Je suis pleinement conscient que cheerio ne comprend pas javascript sur le site, mais pour tout ce que je sais l'information que je gratte ne sont pas générés à partir d'un script, il est pur HTML.
Comment puis-je demander à cheerio d'attendre 1 seconde lorsqu'une page est visitée, ou simplement d'attendre que le html soit complètement chargé.
Voici mon code, cela fonctionne de sorte que vous pouvez l'essayer, et un exemple de la sortie:
pools = [
"http://www.marmiton.org/recettes/recette_salade-de-betteraves-a-l-orientale_16831.aspx",
"http://www.marmiton.org/recettes/recette_pain-d-epices-a-la-dijonnaise_16832.aspx",
"http://www.marmiton.org/recettes/recette_tarte-au-chocolat-et-creme-moka_16834.aspx",
"http://www.marmiton.org/recettes/recette_poulet-a-la-gaston-gerard_16836.aspx",
"http://www.marmiton.org/recettes/recette_assiette-paula_16837.aspx"]
var request = require("request");
var cheerio = require("cheerio");
var poolsLength = pools.length;
for (var i = 0 ; i < pools.length ; i++) {
var url = pools[i];
request(url, function (error, response, body) {
if (!error) {
var $ = cheerio.load(body,{
ignoreWhitespace: true
});
var name = [];
var address = [];
var website = [];
$('body').each(function(i, elem){
name = $(elem).find('.fn').text();
address = $(elem).find('.preptime').text();
website = $(elem).find('.m_content_recette_ingredients').text();
console.log(name+"±"+address+"±"+website);}
)}
})
};`
Comme vous pouvez le voir ci-dessus, il ne travaillait pour 2 sur 5 pages
Merci! Exactement ce que je cherchais :). – gvdh
en utilisant setTimeout pour attendre définitivement du temps n'est pas un bon choix – trungducng