Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用cheerio/node.js获取图像_Javascript_Node.js_Image_Screen Scraping_Cheerio - Fatal编程技术网

Javascript 无法使用cheerio/node.js获取图像

Javascript 无法使用cheerio/node.js获取图像,javascript,node.js,image,screen-scraping,cheerio,Javascript,Node.js,Image,Screen Scraping,Cheerio,我的问题很简单。我试图从下面的amazon链接控制台记录一个图像的URL。无论是从更精确的选择 因此,我花了大部分时间试图选择链接的id/类,但似乎只得到了尽可能接近imgTagWrapperId的链接,这返回了大量冗余信息。从理论上讲,我应该能够抓住与regex的联系,缩小范围,但就我的一生而言,我似乎只能替换我返回的文本,而不是简单地抓住它。或者,如前所述,我试图获取imgsrc本身,结果返回一个无意义的代码字符串。当我查看页面源代码时,相同的文本球会出现在那里,但当我直接检查元素时不会出现

我的问题很简单。我试图从下面的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="{&quot;https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX522_.jpg&quot;:[564,522],&quot;https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX342_.jpg&quot;:[369,342],&quot;https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX679_.jpg&quot;:[733,679],&quot;https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX425_.jpg&quot;:[459,425],&quot;https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX466_.jpg&quot;:[503,466],&quot;https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX569_.jpg&quot;:[615,569],&quot;https://images-na.ssl-images-amazon.com/images/I/81%2Bh9mpyQmL._SX385_.jpg&quot;:[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,即使它是编码的,它也能很好地加载,但我不想对我的数据库征税。