跨域请求被阻止-如何处理本地运行的应用程序?

时间:2019-01-30 08:33:19

标签: javascript vue.js cors cheerio node-fetch

我遇到了一些问题,希望能得到一些帮助。我目前正在尝试做自己的小“培根6度”项目,以期自学一些不同类型的数据结构,搜索算法和一些网络抓取。首先,我编写了以下名为scraper.js的.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和图像源。从命令日志运行脚本如下所示: Just an example where the script returns the name "Kevin Bacon", the URL to his page and a link to his picture.

从外观上看没有问题,一切都按原样记录。但是,当我导出此文件并尝试通过Web浏览器(Firefox)在Vue.js组件中运行相同的脚本时,它不起作用。这就是我的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阻止了不在其服务器上的Web浏览器发出的请求,尽管我可能错了。我现在要做的是,该脚本从命令行运行时效果很好,但根本无法从浏览器中运行。有什么办法解决这个问题?是否可以使Vue应用程序在本地运行scraper.js,而不是要求/导入它作为绕过此方法的方式?我无意公开我的项目或类似的东西,我想要的只是能够从我自己的计算机上运行。

我看过的另一个解决方案是,我尝试使用The Movie Database API,而不是尝试从IMDB抓取信息,尽管它们将请求数量限制为大约40个请求/ 10秒,这尽管不确定,我觉得可能会使应用程序运行得太慢。

你们知道我该如何处理吗?我对这种事情还是有点陌生​​,这是我自己一个人做的第一个“大”项目,以前我真的只是在做与学校有关的项目。谢谢您的时间

0 个答案:

没有答案