当前位置: 首页 > 后端技术 > Node.js

用Node.js爬虫下载音乐

时间:2023-04-03 16:12:21 Node.js

作者:SamAgnew消费资讯。但是,如果数据不是以专用RESTAPI的形式存在,那么通常很难以编程方式访问这些数据。使用jsdom等Node.js工具,您可以直接从网络上抓取和解析这些数据,并将其用于您自己的项目和应用程序。让我们以使用MIDI音乐数据训练神经网络来生成经典的任天堂音乐为例。我们需要一组旧任天堂游戏的MIDI音乐。可以使用jsdom从视频游戏音乐档案中抓取此数据。入门和依赖设置在继续之前,您需要确保您拥有最新版本的Node.js和npm。切换到您希望此代码所在的目录,并在终端中运行以下命令来创建项目的包:npminit--yes--yes该参数可以忽略任何您必须填写或跳过的提示。现在我们的程序有一个package.json以便通过发出HTTP请求从网页中获取数据,我们将使用Got库,对于HTML解析,我们将使用Cheerio。在终端中运行以下命令来安装这些库:npminstallgot@10.4.0jsdom@16.2.2jsdom是大量web标准的纯JavaScript实现,是许多JavaScript开发人员熟悉的工具。让我们深入了解如何使用它。检索数据以与jsdom一起使用首先让我们编写一些代码以从网页中获取HTML,然后看看如何开始解析。以下代码将向我们想要的网页发送GET请求,并使用该网页的HTML创建一个jsdom对象,我们将其命名为dom:constfs=require('fs');constgot=require('got');constjsdom=require("jsdom");const{JSDOM}=jsdom;constvgmUrl='https://www.vgmusic.com/music/console/nintendo/nes';got(vgmUrl).then(response=>{constdom=newJSDOM(response.body);console.log(dom.window.document.querySelector('title').textContent);}).catch(err=>{console.log(err);});将字符串传递给构造函数JSDOM时,将返回一个JSDOM对象,您可以从中访问许多可用的属性,例如window。正如这段代码所示,您可以使用查询选择器。例如querySelector('title').textContent将获取页面上标签内的文本。如果将这段代码保存到一个名为index.js的文件中并使用命令nodeindex.js运行它,它会将网页的标题记录到控制台。将CSS选择器与jsdom一起使用如果您希望在查询中获得更具体的信息,可以使用HTML解析器来解析它。两种最常见的方法是按类或ID获取。如果想获取ID为“menu”的div,可以使用querySelectorAll('#menu'),如果想获取VGMMIDI表中的所有表头列,可以执行querySelectorAll('td.header')我们在这个页面上面需要的是指向我们需要下载的所有MIDI文件的超链接。您可以从querySelectorAll('a')开始获取页面上的每个链接。在index.js中将以下代码添加到您的代码中:>{console.log(link.href);});}).catch(err=>{console.log(err);});此代码记录页面上每个链接的URL。可以使用forEach函数浏览给定选择器中的所有元素。遍历页面上的每个链接都很棒,但如果您想下载所有MIDI文件,则需要更加具体。按HTML元素过滤在编写更多代码来解析您需要的内容之前,让我们看一下浏览器呈现的HTML。每个网页都是不同的,有时从中获取正确的数据需要一些创造力、模式识别和实验。我们的目标是下载许多MIDI文件,但此页面上有许多重复曲目和歌曲混音。我们只想下载其中一首重复的歌曲,并且由于我们的最终目标是使用此数据来训练神经网络以生成准确的任天堂音乐,因此我们不想在用户创建的混音上训练它。当您编写代码来解析网页时,通常可以使用现代浏览器中的开发人员工具。如果右击您感兴趣的元素,您可以检查该元素背后的HTML并获得更多信息。您可以编写过滤器函数来微调所需的选择器数据。这些函数遍历给定选择器的所有元素并返回true或false,具体取决于它们是否应包含在集合中。如果您查看上一步记录的数据,您可能会注意到页面上有很多链接没有href属性,因此无处可寻。我们确定它们不是我们正在寻找的MIDI,因此我们需要编写一个简短的函数来过滤掉那些并包含链接到.mid文件的href元素:constisMidi=(link)=>{//如果没有href属性,则返回false。if(typeoflink.href==='undefined'){returnfalse}returnlink.href.includes('.mid');};现在有一个问题,我们不想下载重复的或者用户生成的混合。正则表达式可用于确保仅获取文本中不带括号的链接,因为只有重复项和混合包含括号:constnoParens=(link)=>{//用于确定文本是否包含括号的正则表达式。constparensRegex=/^((?!\().)*$/;returnparensRegex.test(link.textContent);};尝试通过从querySelectorAll返回来将它们添加到index.js中的代码中创建一个数组HTML元素节点集合,然后对其应用过滤器函数:传播语法。constnodeList=[...dom.window.document.querySelectorAll('a')];nodeList.filter(isMidi).filter(noParens).forEach(link=>{console.log(link.href);});}).catch(err=>{console.log(err);});再次运行代码,它应该只打印.mid文件而不复制任何特定歌曲。从网页上下载我们想要的MIDI文件现在我们有了迭代每个我们需要的MIDI文件的工作代码,我们必须编写代码来下载所有这些文件。在迭代所有MIDI链接的回调函数中,添加以下代码以将MIDI下载流式传输到本地文件,并进行错误检查:nodeList.filter(isMidi).filter(noParens).forEach(link=>{constfileName=link.href;got.stream(`${vgmUrl}/${fileName}`).on('error',err=>{console.log(err);console.log(`${vgmUrl错误}/${fileName}`)}).pipe(fs.createWriteStream(`MIDIs/${fileName}`)).on('error',err=>{console.log(err);console.log(`Erroron${vgmUrl}/${fileName}`)}).on('finish',()=>console.log(`Downloaded:${fileName}`));});从目录和终端屏幕上,我能够看到所有已下载的2230个MIDI文件(在编写此代码时)。这样就完成了我们需要的所有MIDI文件的抓取。现在是时候仔细聆听并享受任天堂音乐了!广阔的万维网您可以通过编程方式从Web获取内容,从而为您需要的任何项目访问大量数据源。要记住的一件事是更改网页的HTML可能会破坏您的代码,因此如果您要在此基础上构建应用程序,请确保所有内容都是最新的。如果您正在寻找与刚刚从视频游戏音乐档案中获得的数据有关的内容,您可以尝试使用像Magenta这样的Python库来训练神经网络。</p> </div> </div> <div class="zuowen_sxy"> <div class="prev">上一篇:<a title="Nodejs学习记录:crypto" href="/houduanjishu/239464.html">Nodejs学习记录:crypto</a> </div> <div class="prev">下一篇:<a title="小程序webview使用坑(因为开发者配置错误的域名,打开失败)" href="/houduanjishu/239466.html">小程序webview使用坑(因为开发者配置错误的域名,打开失败)</a> </div> </div> <div class="related_about"> <div class="related_about_t"><code>用Node.js爬虫下载音乐相关文章</code></div> <ul> <li><a href="/kejifunen/370817.html" target="_blank" title="重新思考可穿戴设备和数据利用!为什么这么难坚持">重新思考可穿戴设备和数据利用!为什么这么难坚持</a></li> <li><a href="/kejifunen/370780.html" target="_blank" title="苹果 Siri 或能识别多个用户,在声纹识别之路上更进一步 ">苹果 Siri 或能识别多个用户,在声纹识别之路上更进一步 </a></li> <li><a href="/kejifunen/370759.html" target="_blank" title="使用可穿戴设备支付!你能杀掉二维码吗? ">使用可穿戴设备支付!你能杀掉二维码吗? </a></li> <li><a href="/kejifunen/370700.html" target="_blank" title="AirPods 电池已过保修期,更换费用为 49 美元">AirPods 电池已过保修期,更换费用为 49 美元</a></li> <li><a href="/kejifunen/370699.html" target="_blank" title="《2015上半年中国智能穿戴行业数据分析报告》用户行为分析">《2015上半年中国智能穿戴行业数据分析报告》用户行为分析</a></li> <li><a href="/kejifunen/370690.html" target="_blank" title="韩国研发纳米级3D打印技术将应用于可穿戴设备">韩国研发纳米级3D打印技术将应用于可穿戴设备</a></li> <li><a href="/kejifunen/370680.html" target="_blank" title="虚拟现实头盔Virglass Phantom使用指南">虚拟现实头盔Virglass Phantom使用指南</a></li> <li><a href="/kejifunen/370679.html" target="_blank" title="腾讯集团副总裁程武!用科技和文化支撑公益梦想">腾讯集团副总裁程武!用科技和文化支撑公益梦想</a></li> <li><a href="/kejifunen/370673.html" target="_blank" title="LG OLED电视C7国外测试!用了半年多屏幕出现明显烧屏">LG OLED电视C7国外测试!用了半年多屏幕出现明显烧屏</a></li> <li><a href="/kejifunen/370666.html" target="_blank" title="热烈讨论!你能用什么来拯救你?可穿戴设备">热烈讨论!你能用什么来拯救你?可穿戴设备</a></li> <li><a href="/kejifunen/370661.html" target="_blank" title="如何使用Apple Watch远程控制Apple TV 4">如何使用Apple Watch远程控制Apple TV 4</a></li> <li><a href="/kejifunen/370647.html" target="_blank" title="用AI连接你的生活! TOPPERS将在GMIC大会上展示多">用AI连接你的生活! TOPPERS将在GMIC大会上展示多</a></li> <li><a href="/kejifunen/370646.html" target="_blank" title="苹果新品发布,搜狗地图成为CarPlay第三方导航应用首选">苹果新品发布,搜狗地图成为CarPlay第三方导航应用首选</a></li> <li><a href="/kejifunen/370632.html" target="_blank" title="德国Bragi公司与IBM合作开发用于工作场景的智能耳机Da">德国Bragi公司与IBM合作开发用于工作场景的智能耳机Da</a></li> <li><a href="/kejifunen/370630.html" target="_blank" title="Miele干衣机使用回顾,黑科技可以拯救你晚期懒癌综合症">Miele干衣机使用回顾,黑科技可以拯救你晚期懒癌综合症</a></li> <li><a href="/kejifunen/370618.html" target="_blank" title="明基智能商用 E610 小剧场 - 如果机器可以互相扇风">明基智能商用 E610 小剧场 - 如果机器可以互相扇风</a></li> <li><a href="/kejifunen/370603.html" target="_blank" title="难怪智能手表的电池寿命很差,因为它们都使用手机处理器">难怪智能手表的电池寿命很差,因为它们都使用手机处理器</a></li> <li><a href="/kejifunen/370601.html" target="_blank" title="警察用智能眼镜“AXON Flex”!现实版的机械战警? ">警察用智能眼镜“AXON Flex”!现实版的机械战警? </a></li> <li><a href="/kejifunen/370579.html" target="_blank" title="智能手表的终极形态!看起来像手表,用起来更像手表">智能手表的终极形态!看起来像手表,用起来更像手表</a></li> <li><a href="/kejifunen/370578.html" target="_blank" title="诺奖得主弟子欲用深度学习颠覆癌症检测">诺奖得主弟子欲用深度学习颠覆癌症检测</a></li> </ul> </div> </div> <div class="main-right"> <div class="right_fix"> <div class="r_con"> <div class="r_title">最新推荐</div> <ul> <li><em>1</em><a href="/kejifunen/371268.html" title="石墨烯可以将普通纸张变成用于柔性显示器和可穿戴设备的新材料" target="_blank">石墨烯可以将普通纸张变成用于柔性显示器和可穿戴设备的新材料</a></li> <li><em>2</em><a href="/kejifunen/371249.html" title="诺基亚用时尚诠释智能手表的未来" target="_blank">诺基亚用时尚诠释智能手表的未来</a></li> <li><em>3</em><a href="/kejifunen/371238.html" title="除螨虫有用吗?那么它只是一个吸尘器吗? " target="_blank">除螨虫有用吗?那么它只是一个吸尘器吗? </a></li> <li><em>4</em><a href="/kejifunen/371232.html" title="Apple Watch 外置电池发布 让使用时间翻倍" target="_blank">Apple Watch 外置电池发布 让使用时间翻倍</a></li> <li><em>5</em><a href="/kejifunen/371225.html" title="网易AI负责人李晓燕!七年磨一剑,探索AR四大应用场景" target="_blank">网易AI负责人李晓燕!七年磨一剑,探索AR四大应用场景</a></li> <li><em>6</em><a href="/kejifunen/371205.html" title="波音工人开始用谷歌眼镜组装飞机" target="_blank">波音工人开始用谷歌眼镜组装飞机</a></li> <li><em>7</em><a href="/kejifunen/371182.html" title="林林的爆料!可穿戴设备的实用性还不够" target="_blank">林林的爆料!可穿戴设备的实用性还不够</a></li> <li><em>8</em><a href="/kejifunen/371180.html" title="迪顶科技newifi雾计算入选“四川省优秀区块链产品及应用案" target="_blank">迪顶科技newifi雾计算入选“四川省优秀区块链产品及应用案</a></li> <li><em>9</em><a href="/kejifunen/371168.html" title="比尔盖茨!没想到你可以用智能手表来管理你的牛群" target="_blank">比尔盖茨!没想到你可以用智能手表来管理你的牛群</a></li> <li><em>10</em><a href="/kejifunen/371163.html" title="奥克斯实行“使用60天不满意包退”的四大理由" target="_blank">奥克斯实行“使用60天不满意包退”的四大理由</a></li> </ul> </div> <div class="r_con"> <div class="r_title">猜你喜欢</div> <ul class="you_like"> <li><em>1</em><a href="/kejifunen/371091.html" title="入选大数据硬独角兽Top20,鲸算科技用科技赋能传统行业" target="_blank">入选大数据硬独角兽Top20,鲸算科技用科技赋能传统行业</a></li> <li><em>2</em><a href="/kejifunen/371088.html" title="华为Watch2上手评测!这个容易用吗? " target="_blank">华为Watch2上手评测!这个容易用吗? </a></li> <li><em>3</em><a href="/kejifunen/371077.html" title="出门问问Ticwatch 2手表试用深度评测+图赏全面了解其" target="_blank">出门问问Ticwatch 2手表试用深度评测+图赏全面了解其</a></li> <li><em>4</em><a href="/kejifunen/371008.html" title="Apple Watch 拥有 8GB 内置存储空间,其中 2" target="_blank">Apple Watch 拥有 8GB 内置存储空间,其中 2</a></li> <li><em>5</em><a href="/kejifunen/371007.html" title="云栖大会直视用友全面展现企业服务活力" target="_blank">云栖大会直视用友全面展现企业服务活力</a></li> <li><em>6</em><a href="/kejifunen/371003.html" title="小米手环如何打动用户? " target="_blank">小米手环如何打动用户? </a></li> <li><em>7</em><a href="/kejifunen/370994.html" title="首批iPhone新用户网友评价褒贬不一!华为P20稳定! " target="_blank">首批iPhone新用户网友评价褒贬不一!华为P20稳定! </a></li> <li><em>8</em><a href="/kejifunen/370989.html" title="高效的公司利用CRM系统避免客户流失" target="_blank">高效的公司利用CRM系统避免客户流失</a></li> <li><em>9</em><a href="/kejifunen/370970.html" title="可穿戴设备或将成为液晶面板主流应用" target="_blank">可穿戴设备或将成为液晶面板主流应用</a></li> <li><em>10</em><a href="/kejifunen/370965.html" title="TicPods 免费! iPhone和Android用户的最" target="_blank">TicPods 免费! iPhone和Android用户的最</a></li> <li><em>11</em><a href="/kejifunen/370914.html" title="我已经用眼睛确认你就是我要找的人" target="_blank">我已经用眼睛确认你就是我要找的人</a></li> <li><em>12</em><a href="/kejifunen/370904.html" title="使用 HTC Vive 时必须了解的几个问题,近视眼还能玩吗" target="_blank">使用 HTC Vive 时必须了解的几个问题,近视眼还能玩吗</a></li> <li><em>13</em><a href="/kejifunen/370901.html" title="阿里巴巴联手万豪,推动人脸识别技术在酒店场景的应用" target="_blank">阿里巴巴联手万豪,推动人脸识别技术在酒店场景的应用</a></li> <li><em>14</em><a href="/kejifunen/370899.html" title="亚马逊将推出即插即用智能音箱增强型低音炮Amazon Ech" target="_blank">亚马逊将推出即插即用智能音箱增强型低音炮Amazon Ech</a></li> <li><em>15</em><a href="/kejifunen/370895.html" title="小米手环开箱图!简单又实用(多图)" target="_blank">小米手环开箱图!简单又实用(多图)</a></li> <li><em>16</em><a href="/kejifunen/370892.html" title="电磁炉这样使用的话,还能再用五年! " target="_blank">电磁炉这样使用的话,还能再用五年! </a></li> <li><em>17</em><a href="/kejifunen/370883.html" title="一加海外官方社区发起活动让用户为自己的新电视命名" target="_blank">一加海外官方社区发起活动让用户为自己的新电视命名</a></li> <li><em>18</em><a href="/kejifunen/370850.html" title="西门子组建投资部门,五年内投资11亿美元用于人工智能等领域" target="_blank">西门子组建投资部门,五年内投资11亿美元用于人工智能等领域</a></li> <li><em>19</em><a href="/kejifunen/370848.html" title="美国科学家研发出一种新型纳米材料,可用于可穿戴电子领域" target="_blank">美国科学家研发出一种新型纳米材料,可用于可穿戴电子领域</a></li> <li><em>20</em><a href="/kejifunen/370828.html" title="6亿用户全部激活,UC成为世界杯信息流平台最大赢家" target="_blank">6亿用户全部激活,UC成为世界杯信息流平台最大赢家</a></li> </ul> </div> </div> </div> </div> <div class="related_article"></div> <div class="footer"> <p>Copyright © 2012-2022 程序源 版权所有<a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">豫ICP备2022028201号</a></p> <p>重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。 如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。</p> </div> <!-- 应用插件标签 start --> <!-- 应用插件标签 end --> </body> </html>