Веб-очистка определенной веб-страницы не может быть завершена - PullRequest
0 голосов
/ 02 января 2019

Итак, я изучаю веб-скребинг с узла 8, а затем npm install - сохранить запрос-обещание cheerio puppeteer

Код прост

const rp = require('request-promise');
const url = 'https://www.examples.com'; //good

rp(url).then( (html) => {
    console.log(html);
}).catch( (e) => {
    console.log(e);
});

Теперь, если URL-адрес examples.com, я могу видеть вывод простого HTML, отлично.

Q1: если yahoo.com, он выводит двоичные данные, например, я, AGZ ~ Ż ڔ + <اٴ Ay + cn1O> ВРК #, BC8. | U> p4U> mś0 Z M Xg "6 lS 2B + Y Ɣ ? * почему это?

Q2: Тогда с nasdaq.com, const url = 'https://www.nasdaq.com/earnings/report/msft'; вышеприведенный код просто не закончится, кажется, висит там.

Почему это пожалуйста?

1 Ответ

0 голосов
/ 02 января 2019

Я не уверен насчет 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 может выполнять более сложное обнаружение ботов, например, проверять различные другие заголовки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...