未能在 google 应用程序脚本中以正确的方式使用地图功能
Failed to use map function in the right way within google apps script
我无法在 google 应用程序脚本中以正确的方式使用地图功能,同时从 webpage 抓取两个字段 - movie name
和 image
。
function scrapeMovies() {
const URL = "https://yts.am/browse-movies";
const response = UrlFetchApp.fetch(URL);
const $ = Cheerio.load(response.getContentText());
const container = $(".browse-movie-wrap");
const result = container.map(item => {
const movieName = $(item).find('a.browse-movie-title').text();
const movieImage = $(item).find('img.img-responsive').attr('src');
console.log(movieName,movieImage);
});
}
当我执行脚本时,我得到的结果是 undefined
。
您仍然可以使用 map
,但您需要更改访问元素的方式。
它是 undefined
的原因是因为您试图对 index
值执行 find
。经测试,每个元素上的容器 returns [index, item]
而不是 [item, index]
。指定您想要的第二个元素将解决问题。
const result = container.map((index, item) => {
const movieName = $(item).find('a.browse-movie-title').text();
const movieImage = $(item).find('img.img-responsive').attr('src');
console.log(movieName, movieImage);
});
但是由于您没有 returning 任何东西,只需使用 Sysix 提到的 each
。
注:
- 出于某种原因,如果我在使用
map
并尝试记录 result
.[=39= 时将两个值 return 都输入 result
,则执行不会结束]
- 我测试了另一种存储数据的方法,下面的脚本有效。
var result = [];
container.each((index, item) => {
const movieName = $(item).find('a.browse-movie-title').text();
const movieImage = $(item).find('img.img-responsive').attr('src');
result.push([movieName, movieImage]);
});
console.log(result);
我无法在 google 应用程序脚本中以正确的方式使用地图功能,同时从 webpage 抓取两个字段 - movie name
和 image
。
function scrapeMovies() {
const URL = "https://yts.am/browse-movies";
const response = UrlFetchApp.fetch(URL);
const $ = Cheerio.load(response.getContentText());
const container = $(".browse-movie-wrap");
const result = container.map(item => {
const movieName = $(item).find('a.browse-movie-title').text();
const movieImage = $(item).find('img.img-responsive').attr('src');
console.log(movieName,movieImage);
});
}
当我执行脚本时,我得到的结果是 undefined
。
您仍然可以使用 map
,但您需要更改访问元素的方式。
它是 undefined
的原因是因为您试图对 index
值执行 find
。经测试,每个元素上的容器 returns [index, item]
而不是 [item, index]
。指定您想要的第二个元素将解决问题。
const result = container.map((index, item) => {
const movieName = $(item).find('a.browse-movie-title').text();
const movieImage = $(item).find('img.img-responsive').attr('src');
console.log(movieName, movieImage);
});
但是由于您没有 returning 任何东西,只需使用 Sysix 提到的 each
。
注:
- 出于某种原因,如果我在使用
map
并尝试记录result
.[=39= 时将两个值 return 都输入result
,则执行不会结束] - 我测试了另一种存储数据的方法,下面的脚本有效。
var result = [];
container.each((index, item) => {
const movieName = $(item).find('a.browse-movie-title').text();
const movieImage = $(item).find('img.img-responsive').attr('src');
result.push([movieName, movieImage]);
});
console.log(result);