我可能会用不正确的术语说这个,所以如果我错了请纠正我。
这是我想要做的:我正在尝试抓取网站的评论部分,但是在页面完全加载后,通过ajax调用加载注释。当我尝试通过以下方式从网站上抓取HTML时
res, err:= http.Get(url)
if err != nil {
// handle error
}
defer res.Body.Close()
但它显然在ajax调用之前得到了html。如何在ajax调用之后获取html?
这完全脱离了我的头脑,但我是否需要在代码中为此基本创建一个js-renderer?我的猜测是JS需要以某种方式执行。关于如何解决这个问题的任何建议/图书馆/示例?我更喜欢这种方式,但它可以用任何语言进行实际操作。
答案 0 :(得分:2)
你可以使用像http://phantomjs.org/之类的无头浏览器获取页面,在其上执行所有javascripts并抓取评论。 此示例可以提供帮助:https://github.com/ariya/phantomjs/blob/master/examples/phantomwebintro.js
但是phantomjs是单独的二进制应用程序,也许安装它可能不是那么简单。
此外,您可以使用Firebug研究该页面,查看要发送的请求以获取评论,并在go中模拟此调用。
也许页面通过javascript代码加载评论
$.get( "/ajax/comments", function( data ) {
$( ".comments" ).html( data );
});
因此您可以使用go
获取和解析/ajax/comments
页面
答案 1 :(得分:1)
最近我遇到了同样的问题,GoQuery帮了很多忙 我尝试了第一个来自网络的网站,其中评论由JS事件加载,并为您写了一个小片段。你可以尝试检查一下。
doc,_ := goquery.NewDocument("http://www.ihg.com/holidayinn/hotels/us/en/san-francisco/sfocc/hoteldetail/hotel-reviews?scmisc=hotel_details_reviews_link_bottom")
html_contents,_ := doc.Html()
fmt.Println(html_contents)
这将首先显示页面主要内容下面的所有注释,这些注释由JS事件加载。
祝你好运!答案 2 :(得分:0)
如果您拥有该站点或者可以轻松确定(或生成)加载注释的调用的URI,则可能更容易自己进行相同的AJAX调用,而不是为DOM解析或任意JS执行而烦恼。
此时Go实际上是一种很好用的语言,因为它的JSON和XML标准库非常适合解组那种数据。