Попытка сломать веб с помощью nodeJS и cheerIO - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь использовать утилизацию с помощью nodeJS и cheerIO, но не могу получить содержимое HTML. Я пытался использовать функцию. html () и не разрешает ее, она говорит, что это не функция.

Это код, в котором я пытаюсь получить данные с веб-страницы:

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

const test_data = {}

test_data.getHouses = async () => {
    const $doc = await request({
        uri: 'https://es-l.airbnb.com/s/San-Sebasti%C3%A1n--Spain/homes?tab_id=all_tab&refinement_paths%5B%5D=%2Fhomes&query=San%20Sebasti%C3%A1n%2C%20Spain&place_id=ChIJFf5oO_6vUQ0RSUaGlFnFPuQ&source=structured_search_input_header&search_type=search_query',
        transform: body => cheerio.load(body)
    });
    console.log($doc);
}

Это вывод объекта запроса.

Request {
  _events: [Object: null prototype] { pipe: [Function] },
  _eventsCount: 1,
  _maxListeners: undefined,
  uri: Url {
    protocol: 'https:',
    slashes: true,
    auth: null,
    host: 'es-l.airbnb.com',
    port: 443,
    hostname: 'es-l.airbnb.com',
    hash: null,
    search: '?tab_id=all_tab&refinement_paths%5B%5D=%2Fhomes&query=San%20Sebasti%C3%A1n%2C%20Spain&place_id=ChIJFf5oO_6vUQ0RSUaGlFnFPuQ&source=structured_search_input_header&search_type=search_query',
    query: 'tab_id=all_tab&refinement_paths%5B%5D=%2Fhomes&query=San%20Sebasti%C3%A1n%2C%20Spain&place_id=ChIJFf5oO_6vUQ0RSUaGlFnFPuQ&source=structured_search_input_header&search_type=search_query',
    pathname: '/s/San-Sebasti%C3%A1n--Spain/homes',
    path: '/s/San-Sebasti%C3%A1n--Spain/homes?tab_id=all_tab&refinement_paths%5B%5D=%2Fhomes&query=San%20Sebasti%C3%A1n%2C%20Spain&place_id=ChIJFf5oO_6vUQ0RSUaGlFnFPuQ&source=structured_search_input_header&search_type=search_query',
    href: 'https://es-l.airbnb.com/s/San-Sebasti%C3%A1n--Spain/homes?tab_id=all_tab&refinement_paths%5B%5D=%2Fhomes&query=San%20Sebasti%C3%A1n%2C%20Spain&place_id=ChIJFf5oO_6vUQ0RSUaGlFnFPuQ&source=structured_search_input_header&search_type=search_query'
  },
  transform: [Function: transform],
  readable: true,
  writable: true,
  _qs: Querystring {
    request: [Circular],
    lib: { formats: [Object], parse: [Function], stringify: [Function] },
    useQuerystring: undefined,
    parseOptions: {},
    stringifyOptions: {}
  },
  ............................
}

Спасибо за чтение!

1 Ответ

0 голосов
/ 26 апреля 2020

Модуль request по умолчанию не является Обещанием. Вы должны были бы поместить обертку сверху этого, чтобы обещать это и использовать это asyn c способом, который Вы хотите. В результате он просто возвращает вам фактический Request объект вместо нужного вам тела.

Используйте этот код, чтобы получить тело:

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

const test_data = {}

test_data.getHouses = () => {
    const $doc = request({
        uri: 'https://es-l.airbnb.com/s/San-Sebasti%C3%A1n--Spain/homes?tab_id=all_tab&refinement_paths%5B%5D=%2Fhomes&query=San%20Sebasti%C3%A1n%2C%20Spain&place_id=ChIJFf5oO_6vUQ0RSUaGlFnFPuQ&source=structured_search_input_header&search_type=search_query',
        transform: body => cheerio.load(body)
    }, function(err, response, body) {
      console.log(body);
    });
}

test_data.getHouses();
...