Очистка и хранение Shopify сайтов электронной коммерции с использованием Node.js - PullRequest
0 голосов
/ 05 октября 2018

Я написал код для очистки массива сайтов электронной коммерции Shopify с помощью модуля website-scrapper npm в node.js, но он показывает ошибку 403, но тот же код работает и для других сайтов.

Как мы можемобойти эту проблему?

Мой файл scrapperTest.js:

var scrape = require('website-scraper');
let test = require('./test')
let urls = [];
urlList = ['1500.academy'];
urlList.forEach(url =>{
    test.checkRedirect(url)
    .then(domain =>{
        urls.push('https://' + domain);
        console.log(urls);
        var options = {
            urls: urls,
            directory: './autochat/',
            'User-Agent': 'request',
        };

        // with promise
        scrape(options).then((result) => {
            /* some code here */
        }).catch((err) => {
            /* some code here */
        });

        // or with callback
        scrape(options, (error, result) => {
            /* some code here */
        });
    })
})

и файл test.js

const request = require('request');
const extractDomain = require('extract-domain');

//var link = 'oneplustwocase.com';

function checkRedirect(link) {
    return new Promise((resolve, reject) => {

        var url = "http://" + link;
        var options = {
            url: url,
            headers: {
                'User-Agent': 'request'
            }
        };
        request(options, function (error, response, body) {
            let redirectedDomain = extractDomain(response.request.uri.href);
            if(response !== undefined){
                extractDomain(response.request.uri.href);
                if (response.statusCode === 200 && link !== redirectedDomain) {
                   resolve(redirectedDomain);
                } else {
                    resolve(link);
                }
            } else {
                resolve(link);
            }
        });
    });
}

module.exports.checkRedirect = checkRedirect;

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Поскольку вас интересуют данные, избавьте себя от головной боли при очистке и просто загрузите файл XML сайта.Он содержит все продукты и интересную информацию, как Google или любой другой поисковой системы.

0 голосов
/ 11 октября 2018
  • Похоже, что веб-сайт http://1500.academy возвращает 403, если ему не нравится заголовок агента пользователя.Я предлагаю попробовать пользовательский агент, который выглядит как браузер

  • Согласно website-scraper документации https://www.npmjs.com/package/website-scraper#request вы должны передавать заголовки для запроса в свойстве request, а не в rootуровень

Значения должны быть такими:

const options = {
  urls:[{url: 'http://1500.academy/'}],
  directory: './autochat/',
  request: {
    headers: {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
    }
  }
}

Кстати, website-scraper по умолчанию следует за перенаправлениями, поэтому вы можете пропустить проверку перенаправлений

0 голосов
/ 05 октября 2018

Я получил решение.Мы можем получить html-данные домена, используя request ();Response.body содержит html-данные

решение, которое я получил, используя следующий код:

const request = require('request');
const extractDomain = require('extract-domain');
let fs = require('fs');

function checkRedirect(link) {
        var url = "http://" + link;
        var options = {
            url: url,
            headers: {
                'User-Agent': 'request'
            }
        };
        request(options, function (error, response, body) {

            if(response !== undefined){
                let redirectedDomain = extractDomain(response.request.uri.href);
                let writeStream = fs.createWriteStream(redirectedDomain + '.html');
                writeStream.write(response.body)
                writeStream.end();
        });
}

module.exports.checkRedirect = checkRedirect;

//checkRedirect('oneplustwocase.com')

/*
var r = request(url, function (e, resp) {
    r.uri
    resp.request.uri
  })*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...