2017-12-01 4 views

答えて

0

ことによってそれを行うにはどのような方法を持っている場合、私は知らない

const Nightmare = require('nightmare'); 
const nightmare = Nightmare({ 
show:true 
});// } 
const request = require('request'); 
const cheerio = require('cheerio'); 

let url = 'https://www.housers.com/es/proyectos/avanzado'; 
let propertyArray = []; 

var getThePage = function() { 

    nightmare 
     .goto('https://www.housers.com/es/proyectos/avanzado') 
     .wait(1500) 
     .click('#loadMore') 
     .evaluate(() =>{ 
     return document.querySelector('.all-info').innerHTML; 
     }) 
    .end() 
    .then((result) => { 
     let $ = cheerio.load(result); 
     let loadMore = $('#loadMore') 
     if (loadMore) { 
      getThePage(); 
     } 
     return result 
     }) 
     .catch((error) => { 
     console.error('Search failed:', error); 
     }); 
     } 
    getThePage() 

:私のコードは次のようなものです悪夢を使う必要はありません。ネットワークタブから、あなたはそれがこのエンドポイントを呼び出すことがわかります。

https://www.housers.com/es/proyectos/avanzado/scroll 

いくつかの改ページ&ページサイズで、のは(それが限界値を超えるかどうかわからない)ページごとに200を見てみましょう。助けのための

const axios = require('axios'); 
const querystring = require('querystring'); 
const cheerio = require('cheerio'); 
const entities = require("entities"); 

const url = 'https://www.housers.com/es/proyectos/avanzado/scroll'; 

const prices = []; 

function doRequest(url, page){ 
    return axios.post(url + '?page=' + page + '&size=200', querystring.stringify({ 
    word: "", 
    country: "", 
    type: "", 
    order: "STOCK_PRICE_VARIATION", 
    orderDirection: "DESC" 
    })); 
} 

async function getPrices() { 
    var empty = false; 
    var page = 0; 

    while (!empty) { 
    //call API 
    console.log("GET page n°" + page); 
    var res = await doRequest(url, page); 
    page++; 

    //parse HTML 
    const $ = cheerio.load(res.data,{ 
     xmlMode: true, 
     normalizeWhitespace: true, 
     decodeEntities: true 
    }); 

    if (res.data.trim() !== ""){ 
     //extract prices : put it in array 
     $('tr').map(function(){ 
     var obj = []; 
     $(this).children('td').map(function(){ 
      obj.push(entities.decodeHTML($(this).text().trim())); 
     }); 
     prices.push(obj); 
     }); 
    } 
    else { 
     empty = true; 
    } 
    } 
    console.log(prices); 
    console.log("total length : " + prices.length); 
} 

getPrices(); 
+0

ありがとう:

次に、あなただけのhtmlに、アレイ内の&プットデータを解析する必要があります。もっと明確にするために、ブラウザとネットワーク "dev bar"の中を調べました。そして、Webサイトへのリクエストを確認することができます。それが無限のスクロールまたはより多くのボタンをロードしても、ドメインへの呼び出しを示すので、セレクタを探す必要はありません。 –

関連する問題