используйте node js для запуска веб-сканера, но не можете выполнять поиск данных

#node.js

#node.js

Вопрос:

Я использую node js для выполнения веб-поиска.
Я хочу показать погоду, но всегда терплю неудачу.

введите описание изображения здесь

это мой код, пожалуйста, скажите мне, в чем я ошибаюсь, спасибо.

 const request = require('request')
const ironmans = [
  'https://www.cwb.gov.tw/V7/forecast/town368/towns/6400800.htm? 
   type=Weatheramp;time=7Day',
]

async.map( ironmans, getInfo, (err, results)=>{
console.log(results);
})

function getInfo(url, callback){
request(url, function(err, res, body){
var $ = cheerio.load(body)
const result = []; 
const table_tr = $(".Forecast-box table tr");  
for (let i = 1; i <3; i  ) { //  tr
  const table_td = table_tr.eq(i).find('td'); // (td)
  const time = table_td.eq(2).text(); // time
  const temperture = table_td.eq(4).text(); // temperture 
  const weather = table_td.eq(4).text(); // weather 
  result.push(Object.assign({  time, temperture, weather }));
  }
  console.log(result);
  })
}
  

Спасибо.

Ответ №1:

Таблица погоды была добавлена к странице запросом xhr, это означает, что если вы используете request для получения ресурса страницы, то вы не сможете получить таблицу данных (как вы View page source ). Попробуйте другие способы (безголовый браузер), простой способ обхода https://www.cwb.gov.tw/V7/forecast/town368/3Hr/6400800.htm вместо https://www.cwb.gov.tw/V7/forecast/town368/towns/6400800.htm?
type=Weatheramp;time=7Day

Комментарии:

1. как я могу узнать, как использовать этот веб-сайт? где я могу найти? cwb.gov.tw/V7/forecast/town368/3Hr/6400800.htm

2. @samuraikyo37 Откройте инструмент разработчика (браузер Chrome) на вкладке Сеть, при нажатии кнопки к 1週預報 , 過去24小時 или 逐3小時預報 был запущен сетевой запрос. Это то, что вы хотите.

3. Мне интересно, почему я не могу получить информацию о погоде (в каком столбце есть изображение солнца и луны), я пытаюсь: weather =table_tr.eq(3).text(); / или const a = $ («.Заголовок таблицы tr td окна прогноза»); weather = a.eq (1).text(); по-прежнему не работает. как я могу сделать? Спасибо