Issue
I am creating an ionic app. I'm using Cheerio with Node.js to scrape a site. I can't get the whole array back to localhost, it just returns the first object. How can I go about returning the entire array?
This is the scraping code (scraper.js)
const request = require('request')
const cheerio = require('cheerio');
request('https://mywebsite', (error, response, html) => {
if (!error && response.statusCode == 200) {
const $ = cheerio.load(html)
const art = $('article').each((i, el) => {
const title = $(el)
.find('.entry-title.mh-posts-grid-title')
.text();
const link = $(el)
.find('a')
.attr('href');
const image = $(el)
.find('.mh-thumb-icon.mh-thumb-icon-small-mobile')
.text()
const Arra = { title: [title], link: [link], image: [image] }
exports.Arra = Arra
This is the code where I export the data (document.js)
const express = require("express");
const ok = require('./ok')
const app = express();
const porta = '8000'
app.get('/', (req, res) => {
res.send(ok.Arra);
})
app.listen(porta, () => {
console.log(`Server ex ${porta}`);
});
Solution
If the code posted is the sum total of your code then the issue is likely the missing closing tags. It should be as shown below:
const request = require('request');
const cheerio = require('cheerio');
const Arra = [];
request('https://mywebsite', (error, response, html) => {
// reset Array on each call
Arra = [];
if (!error && response.statusCode == 200) {
const $ = cheerio.load(html)
console.log('the array I am going to iterate over is', $);
const art = $('article').each((i, el) => {
const title = $(el)
.find('.entry-title.mh-posts-grid-title')
.text();
const link = $(el)
.find('a')
.attr('href');
const image = $(el)
.find('.mh-thumb-icon.mh-thumb-icon-small-mobile')
.text();
// you must push each result into the array otherwise you are just going to have one result.
Arra.push({ title: [title], link: [link], image: [image] });
} // close of .each block
}// close of if block
}// close of request block
exports.Arra = Arra;
Answered By - E. Maggini
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.