Перекрестный запрос заблокирован - как использовать приложение, работающее локально?
Я столкнулся с небольшой проблемой и надеялся получить помощь. В настоящее время я пытаюсь сделать свой собственный маленький проект "6 градусов Бэкона", чтобы научить себя различным структурам данных, алгоритмам поиска и некоторому поиску в Интернете. Для начала я написал следующий.js-файл с именем scraper.js:
const fetch = require('node-fetch');
const cheerio = require('cheerio');
const url = "https://www.imdb.com/find?ref_=nv_sr_fn&s=all&q=";
function searchIMDB(searchTerm){
return fetch(`${url}${searchTerm}`)
.then(response => response.text())
.then(body => {
const $ = cheerio.load(body);
let firstHit = $('.findResult').first();
let actorName = $(firstHit).find('.result_text').find('>:first-child').text();
let actorURL = $(firstHit).find('td a').attr('href');
let actorIMG = $(firstHit).find('td a img').attr('src');
console.log(actorName);
console.log(actorURL);
console.log(actorIMG);
});
}
module.exports = {
searchIMDB
}
Это простой скрипт, использующий node-fetch и cheerio. Все, что он делает, это берет поисковый запрос, ищет его в IMDB и консоль регистрирует имя первого попадания, URL и источник изображения. Запуск сценария из журнала команд выглядит следующим образом: просто пример, в котором сценарий возвращает имя "Кевин Бэкон", URL-адрес его страницы и ссылку на его изображение.
Нет проблем из того, что кажется, все записывается так, как должно. Однако, когда я экспортирую это и пытаюсь запустить тот же скрипт в моем компоненте Vue.js через мой веб-браузер (Firefox), он не работает. Вот как выглядит импорт в моем vue-компоненте:
let scraper = require('./scraper.js');
scraper.searchIMDB('Kevin Bacon');
Что дает мне следующую ошибку:
Блокировка перекрестного запроса: та же политика происхождения запрещает чтение удаленного ресурса по адресу https://www.imdb.com/find?ref_=nv_sr_fn&s=all&q=kevin%20bacon. (Причина: отсутствует заголовок CORS "Access-Control-Allow-Origin".) [Узнать больше] TypeError: NetworkError при попытке извлечь ресурс.
Из того, что я понял, эта ошибка означает, что IMDB блокирует запросы, сделанные из веб-браузеров, а не на их сервере, хотя я могу ошибаться в этом. Что я делаю сейчас, так это то, что скрипт отлично работает из командной строки, но не работает из браузера. Есть ли способ решить это? Возможно ли заставить приложение Vue запускать файл scraper.js локально, вместо того, чтобы требовать / импортировать его как способ обойти это? У меня нет намерения публиковать свой проект или что-то в этом роде, все, чего я хочу, - это запускать его со своего компьютера.
Другое решение, на которое я обратил внимание, состоит в том, что вместо того, чтобы пытаться очистить информацию из IMDB, я вместо этого рассмотрел использование API базы данных Movie, хотя они ограничивают количество запросов примерно 40 запросами /10 секундами, что, на мой взгляд, может сделать приложение слишком медленным, хотя я не уверен.
Ребята, вы понимаете, как мне к этому подойти? Я все еще новичок в такого рода вещах, это мой первый "большой" проект, который я делаю самостоятельно, я действительно делал только те проекты, которые раньше были связаны со школой. Спасибо за ваше время