Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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部分?_Javascript_Node.js_Web Scraping - Fatal编程技术网

如何刮取网页的javascript部分?

如何刮取网页的javascript部分?,javascript,node.js,web-scraping,Javascript,Node.js,Web Scraping,我正试图在Node.js中抓取一些站点。然而,我注意到这可能不是我想要的,也就是说,我可能正在查看页面的javascript部分,而不是html部分 可能吗? 原因是,我正在寻找加载下面代码部分的内容,我可以在Safari(不在Chrome中显示)中查看kayak.com页面(请参见下面的url),并且似乎在脚本部分 reducer: {"reducerPath":"flights\/results\/react\/reducers\/ 更新:不幸的是,该网站使用了bot/scrape保护:像

我正试图在Node.js中抓取一些站点。然而,我注意到这可能不是我想要的,也就是说,我可能正在查看页面的javascript部分,而不是html部分

可能吗?

原因是,我正在寻找加载下面代码部分的内容,我可以在Safari(不在Chrome中显示)中查看kayak.com页面(请参见下面的url),并且似乎在脚本部分

reducer: {"reducerPath":"flights\/results\/react\/reducers\/

更新:不幸的是,该网站使用了bot/scrape保护:像
curl
这样的工具获取带有bot警告的页面,像
puppeter
这样的无头浏览器工具获取带有验证码的页面

===============

由于这一行出现在HTML源代码中,并且不是通过JavaScript执行动态添加的,因此您可以在适当的库API中使用类似的内容:

const extractedString=[…document.querySelectorAll('script')]
.map(({textContent})=>textContent)
.find(txt=>txt.includes('string'))
.match(/regexp/);

所谓“刮去JavaScript”是指执行JavaScript,以便它像在浏览器中一样修改HTML吗?或者您只是在尝试获取JavaScript代码?您可以在控制台中检查
window.R9
,检查他们是否将此对象存储在另一个变量中,但似乎它仅用于他们的React code
window.R9.init.push({reducer:{“reducerPath”:“})
。您还可以查询所有脚本元素并运行正则表达式来查找这一行。我认为它不会存储在其他任何地方。您如何查询所有脚本元素?到目前为止使用的是Puppeter,但我的理解是,这只是删除html部分(所以我的问题),谢谢,但您确定它在html源代码中吗?它在R9.react.boot()中在执行以下操作时未加载到源代码中:const rp=require('request-promise');rp(url){嗯,我刚刚使用了Chrome dev tools network选项卡并在主响应正文中搜索,字符串就在那里。嗯,curl返回的源代码没有这个部分。它看起来像是浏览器,而不是浏览器客户端可能会得到不同的源代码。我将很快更新我的答案。更新:不幸的是,这个网站使用了bot/scrape保护:类似
curl的工具
获取带有机器人警告的页面,无头浏览器工具,如
Puppeter
获取带有验证码的页面。非常感谢您进一步检查。但我不知道的是,在Safari中检查代码时,会将该标记显示为R9.react.boot的一部分({。那么Safari有什么其他工具无法得到的呢?为真正的问题道歉。。