#javascript #arrays #web-scraping #axios #cheerio
Вопрос:
У меня есть множество обновлений новостей, поступающих с этого сайта здесь. То, что я ищу, — это console.log
последние новостные статьи по мере их публикации или очень близко к моменту их публикации. С помощью моего кода я могу отправить запрос на получение статей, но я хочу знать, когда массив изменяется с новой записью.
const axios = require('axios')
const cheerio = require('cheerio')
const express = require('express')
const PORT = 3000
const URL = 'https://www.newworld.com/en-us/news'
const splitURL = URL.slice(0, 24)
const app = express()
setInterval(() => {
axios(URL)
.then(response => {
const html = response.data
const $ = cheerio.load(html)
const articles = []
$('.ags-SlotModule', html).each(function(){
const link = splitURL $(this).find('a').attr('href')
articles.push({
link
})
})
console.log(articles[0])
}).catch(err => console.log(err))
}, PORT)
app.listen(PORT, () => console.log('server running'))
Кроме того, я не нашел никакого API или RSS-канала, который я мог бы использовать для получения обновлений.
Комментарии:
1. это меняется, когда вы это делаете
articles.push
, что тогда вы хотите с этим делать?2. Ничего. Я хочу, чтобы это ничего не делало.
3. у каждой из статей есть URL-адрес, используйте его для идентификации страницы, затем просто создайте объект объектов, ключом которого является URL, тогда вы не получите дубликатов, а затем очистите данные, у каждого элемента есть дата, которую вы можете использовать для заказа и т. Д., Также есть этот URL newworld.com/en-us/news-load-more?page=1 которыйимеет только posts dom, если вы хотите где-то запустить событие, если что-то изменилось, создайте свой объект с помощью Object.defineProperty и в set испускает EventEmitter (или использует экспресс-события), хотя неясно, почему вы используете express
4. Передача значения
PORT
as с задержкой в миллисекундуsetInterval
может быть ошибкой.5. Может быть. Может быть, нет.