Как использовать данные из скрипта в другом - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу немного автоматизировать свою работу.

У меня есть два файла.Я хочу использовать выходные данные первого (список ссылок) и использовать его во втором, чтобы просмотреть каждый из них и извлечь некоторые данные.

Этот сценарий создает список URL-адресов, которые перечислены настраница нашего глоссария:

const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
const writeStream = fs.createWriteStream('links.csv');

request('https://www.myurl.com/glossary', (error, response, html) => {
if (!error && response.statusCode == 200) {
const $ = cheerio.load(html);

$('div.letter > ul > li').each((i, el) => {
  const link = $(el)
    .find('a')
    .attr('href');

  writeStream.write(`${link} \n`);
});
console.log('Done...');
}
});

Второй файл должен искать h1 и .class и помещать его в URL-адрес формы файла .html:

const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
const writeStream = fs.createWriteStream('data.html');

request('what to put here?', (error, response, html) => {
if (!error && response.statusCode == 200) {
const $ = cheerio.load(html);

$('div.content').each((i, el) => {
  const term = $(el)
    .find('h1')
    .text();
  const definition = $(el)
    .find('.glossary_short_definition')
    .text();

  writeStream.write(`<h1>${term}</h1> <p>${definition}</p> \n`);
});

console.log('Done...');
 }
});

Я добавил импорт / экспорт в файлы.

Как я могу использовать эти URL во втором файле?

1 Ответ

0 голосов
/ 20 ноября 2018

Вам не нужно сохранять список URL в CSV.Вы можете просто передать его второму запросу, заключенному в функцию.Вы можете сделать что-то вроде этого:

const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
const writeStream = fs.createWriteStream('data.html');

request('https://www.myurl.com/glossary', (error, response, html) => {
  if (!error && response.statusCode == 200) {
  const $ = cheerio.load(html);

  $('div.letter > ul > li').each((i, el) => {
    const link = $(el)
      .find('a')
      .attr('href');

    followUrl(link); // pass the link value to the next request...

  });
  console.log('Done...');
  }
});


function followUrl(link){
  request( link , (error, response, html) => {
  if (!error && response.statusCode == 200) {
  const $ = cheerio.load(html);

  $('div.content').each((i, el) => {
    const term = $(el)
      .find('h1')
      .text();
    const definition = $(el)
      .find('.glossary_short_definition')
      .text();

    writeStream.write(`<h1>${term}</h1> <p>${definition}</p> \n`);
  });

  console.log(`Done for url: ${link}`);
   }
  });
}

Но знаете ли вы, что вы можете сделать то же самое с меньшим кодом, используя вместо этого osmosis ?

const osmosis = require('osmosis');
const fs = require('fs');
const writeStream = fs.createWriteStream('data.html');

osmosis
  .get('https://www.myurl.com/glossary')
  .follow('@href') // browse each href in the url
  .set({
    'term' : 'h1',
    'definition' : '.glossary_short_definition'
  })
  .data((res) => {
    // do something with the data result
    writeStream.write(`<h1>${res.term}</h1> <p>${res.definition}</p> \n`);
  })
  .done((x) => console.log('finished!'))
  .log(console.log)
  .error(console.log)
  .debug(console.log);
...