在Node中抓取时图像网址发生变化(在浏览器控制台中工作)

时间:2017-08-21 01:32:03

标签: node.js web-scraping

我正在使用artoo.js进行网页抓取但是出于某种原因,在节点中使用cheerio时,抓取的图片网址会发生变化。即原始图片网址为:

"https://images-na.ssl-images-amazon.com/images/M/MV5BNWU4NmY3MTMtMTBmMi00NjFjLTkwMmItYWZhZWUwNDg5M2ExXkEyXkFqcGdeQXVyNDUyOTg3Njg@._V1_SX300.jpg"

然而,在抓取Url之后转到这个网址:

"http://ia.media-imdb.com/images/G/01/imdb/images/nopicture/156x231/tv-3797070466._CB522736147_.png@._V1_SX300.jpg"

如果我使用Artoo.js书签在Chrome浏览器控制台中抓取它。 Url与原始版本保持一致。 当我在节点中使用它时为什么会改变?。任何建议

更新:更新:我认为我找到了问题但不是解决方案。似乎刮刀方法在页面上加载了正确的图像之前运行。更改的URL只是占位符图像。我怎么能等到整个页面加载。

1 个答案:

答案 0 :(得分:0)

可能是由一些JS代码引起的。如果您使用request + cheerio来废弃该页面。当你在节点中发出请求时,JS代码什么都不做(它没有被解释)。因此,您可能会在任何lib或代码更改之前获取原始URL。尝试在浏览器Crtl+u中查看页面的源代码。如果它是"http://ia.media-imdb.com/images/G/01/imdb/images/nopicture/156x231/tv-3797070466._CB522736147_.png@._V1_SX300.jpg",那么您将知道某些代码正在做一些改变它的事情。

修改

如果你绝对需要运行JS来获取URL。你可以使用phantomjs。这是一个无头浏览器。 imaes将加载。您可以直接从nodejs使用它,或者如果您想要更简单的方法,请使用casperjs。我假设你不习惯拼写复杂的网络应用程序。如果是这样的情况将与casperjs一起使用。它很容易,它可以完成这项工作。它不如使用request + cheerio快,但它有效。您可以将代码放在服务器上运行。