2017-05-28 38 views
-1

我试图抓取一个网站的内容。我能够使用nodejs获取主页面的HTML,但我发现该页面是动态生成的。资源是从其他来源请求的,而当我在最后抓取HTML时,它们还没有。如何获取动态加载的页面的HTML

我已经通过PhantomJS验证了这一点,它允许我屏幕抓取页面并生成抓取内容的截图。该页面肯定会加载,但它完全没有用处。

我在问的是,这可以做到吗? CORS是这里的问题,还是我需要以某种方式延迟加载?任何想法都表示赞赏。

+1

延迟抓取,直到页面为您提供了所有要查找的内容,包括超时或将抓取链接到页面加载完成事件中。 –

+0

超时是不行的。我在10秒后得到相同的空白页面。 –

+0

PhantomJS是什么版本?什么'page.onError'回调说?你*有*使用node.js这个刮或可以一个原始的PhantomJS脚本吗?你能透露刮过的网址吗? – Vaviloff

回答

0

如果你使用流,它可能会抓住所有的数据,直到真的没有剩下的东西。使用请求库:

const writeStream = fs.createWriteStream('somefile.txt'); 
request('http://google.com').pipe(writeStream); 

如果你想要更多的控制:

const writeStream = fs.createWriteStream('somefile.txt'); 
const r = request('http://google.com'); 
r.pipe(writeStream) 
r.on('data', data => { 
    console.log('Grabbing data!'); 
}); 

r.on('end',() => { 
    console.log('data grabbing has ended') 
}); 
+0

有趣的...所以这里的想法是它会实时生成HTML,类似于浏览器请求时如何加载页面? -----为了理智,你能确认我没有遇到任何与他们的JS脚本有关的问题吗?即使在真正的浏览器之外请求时,我也应该能够加载这些内容? –

-1

噩梦JS是这里的解决方案......使用梦魇我能打开浏览器并做各种疯狂的东西。

对于那些好奇的人来说,这些文档可以在GitHub和他们的网站上找到。

对于那些遇到类似问题的人,我真的建议检查一下。

Nightmare JS website Nightmare GitHub

0

我相信它可以使用幻象做,但我确实觉得casperJS简单。它建立在PhantomJS之上,但更简单。它可以让你访问DOM内的iframes,你也可以使用waitfor函数,它允许你在执行/抓取之前等待特定的选择器或其他资源,这在处理动态页面时非常有用。