【发布时间】:2023-06-02 09:22:01
【问题描述】:
我使用 node.js 中的 website-scraper npm 模块编写了一个代码来抓取一系列 Shopify 电子商务网站,但它显示 403 错误,但相同的代码适用于其他网站。
我们怎样才能解决这个问题?
我的 scraperTest.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;
【问题讨论】:
-
我很欣赏这个大胆的问题。现实是 - Shopify 可能会以各种原因和方式拒绝您的请求,并在不告诉您原因的情况下直接返回 403。
-
有什么办法可以解决这个问题。就像虚张声势说请求来自浏览器一样。我尝试使用用户代理标头,但这也不起作用。
标签: node.js web-scraping shopify