Я не уверен насчет Q2, но могу ответить на Q1.
Похоже, что Yahoo распознает вас как бота и не дает вам скрести страницу! Наиболее распространенный метод, используемый сайтами для обнаружения ботов, - это заголовок User-Agent . Когда вы делаете запрос, используя request-promise
(который использует внутреннюю библиотеку request
), он вообще не устанавливает этот заголовок. Это означает, что веб-сайты могут сделать вывод, что ваш запрос поступил из программы (а не из веб-браузера), поскольку заголовок User-Agent отсутствует. Затем они будут относиться к вам, как к ботам, и отправлять вас обратно на тарабарщину или никогда не будут обслуживать вас.
Вы можете обойти это, вручную установив заголовок User-Agent , чтобы имитировать браузер. Обратите внимание, что это, кажется, работает для Yahoo, но может не работать для всех веб-сайтов. Другие сайты могут использовать более продвинутые методы для обнаружения ботов.
const rp = require('request-promise');
const url = 'https://www.yahoo.com'; //good
const options = {
url,
headers: {
'User-Agent': 'Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0'
}
};
rp(options).then( (html) => {
console.log(html);
}).catch( (e) => {
console.log(e);
});
Q2 может быть связано с этим, но приведенный выше код не решает эту проблему. Nasdaq может выполнять более сложное обнаружение ботов, например, проверять различные другие заголовки .