Javascript 无法使用cheerio/node.js获取图像
我的问题很简单。我试图从下面的amazon链接控制台记录一个图像的URL。无论是从更精确的选择 因此,我花了大部分时间试图选择链接的id/类,但似乎只得到了尽可能接近imgTagWrapperId的链接,这返回了大量冗余信息。从理论上讲,我应该能够抓住与regex的联系,缩小范围,但就我的一生而言,我似乎只能替换我返回的文本,而不是简单地抓住它。或者,如前所述,我试图获取imgsrc本身,结果返回一个无意义的代码字符串。当我查看页面源代码时,相同的文本球会出现在那里,但当我直接检查元素时不会出现Javascript 无法使用cheerio/node.js获取图像,javascript,node.js,image,screen-scraping,cheerio,Javascript,Node.js,Image,Screen Scraping,Cheerio,我的问题很简单。我试图从下面的amazon链接控制台记录一个图像的URL。无论是从更精确的选择 因此,我花了大部分时间试图选择链接的id/类,但似乎只得到了尽可能接近imgTagWrapperId的链接,这返回了大量冗余信息。从理论上讲,我应该能够抓住与regex的联系,缩小范围,但就我的一生而言,我似乎只能替换我返回的文本,而不是简单地抓住它。或者,如前所述,我试图获取imgsrc本身,结果返回一个无意义的代码字符串。当我查看页面源代码时,相同的文本球会出现在那里,但当我直接检查元素时不会出现
const request = require('request');
const cheerio = require('cheerio');
request(`http://amazon.com/dp/B079H6RLKQ`, (error,response,html) =>{
if (!error && response.statusCode ==200) {
const $ = cheerio.load(html);
const productTitle = $("#productTitle").text().replace(/\s\s+/g, '');
const prodImg = $(`#imgTagWrapperId`).html();
console.log(productTitle);
console.log(prodImg);
} else {
console.log(error);
}
})
此当前代码将忠实地返回产品标题,但会为prodImg输出返回此标题:
<img alt="Samsung Galaxy S9 G960U 64GB Unlocked 4G LTE Phone w/ 12MP Camera - Midnight Black" src="
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAEsARYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL
...(this nonsense goes on for a mile) ....
" data-old-hires="https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SL1500_.jpg" class="a-dynamic-image a-stretch-horizontal" id="landingImage" data-a-dynamic-image="{"https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX522_.jpg":[564,522],"https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX342_.jpg":[369,342],"https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX679_.jpg":[733,679],"https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX425_.jpg":[459,425],"https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX466_.jpg":[503,466],"https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX569_.jpg":[615,569],"https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX385_.jpg":[416,385]}" style="max-width:679px;max-height:733px;">
</div>
在此提前感谢您的帮助和指导。我已经用尽了所有其他通常的来源,准备被称为白痴
编辑:
有人想在选择之前和之后使用html,我很乐意,但最好只查看链接中的页面源代码并按ctrl+f组合键。下面的文字墙
图像不可用
图像不可用于颜色:
难道你不能直接以图像为目标,用.attr'src'获取url吗 const request=要求“请求”; const cheerio=需要“cheerio”; 请求'http://amazon.com/dp/B079H6RLKQ,错误,响应,html=>{ if!error&&response.statusCode==200{ const$=cheerio.loadhtml; const productTitle=$'productTitle'.text.replace/\s\s+/g; const prodImg=$'landingImage'.attr'data-old-hires'; console.logproductTitle; console.logprodImg; }否则{ console.logerror; } };
感谢Rishi Raj提供的快速修复解决方案。$'landingImage'.attr'data-old-hires'。我还向const中添加了一个不必要的.html,这会造成阻碍。再次感谢大家 请在img标记之前和之后给我们一些html标记。您好!您已成功返回的prodImg输出具有data old hires属性,该属性是图像链接。您可以通过执行$landingImage.attr'data-old-hires'获取该链接,也可以获取src,它是URL的base64编码版本。@WilliamGunawan我在编辑中发布了HTML。@RishiRaj谢谢您,我的好先生。这种方法是选择老员工的数据,但我非常有兴趣学习如何将base64解码回url。我认为问题不在于代码本身,而是amazon在处理此类请求时需要验证码,我在HTML中得到的回应是:`输入您在下面看到的字符
对不起,我们只需要确保您不是机器人。为了获得最佳效果,请确保您的浏览器正在接受cookies。
`这种做法会导致返回undefined.Hm,刚刚在实际页面上尝试关闭javascript,src属性是base64编码的图像,因此我切换到data old hires属性以获取URL,可能这就是问题所在,你能试试:$'landingImage'.attr'data-old-hires';?有什么方法可以可靠地解码base 64吗?我想尝试并坚持使用src,即使它是编码的,它也能很好地加载,但我不想对我的数据库征税。