我遇到了一些问题,希望能得到一些帮助。我目前正在尝试做自己的小“培根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秒,这尽管不确定,我觉得可能会使应用程序运行得太慢。
你们知道我该如何处理吗?我对这种事情还是有点陌生,这是我自己一个人做的第一个“大”项目,以前我真的只是在做与学校有关的项目。谢谢您的时间