新手问题 该如何抓取通过 js 显示的内容呢?

cicholgricenchos · 2014年06月22日 · 最后由 naitnix 回复于 2015年02月26日 · 2393 次阅读

例如现在百度的搜索结果都是通过js动态显示的,查看源代码的方式完全无效,我查到capybara-webkit似乎可以处理这种情况,不过还是一头雾水,有没有一些简单的例子可以抓取百度的搜索结果?谢谢!

看了文档之后确认了capybara可以通过wait来获取AJAX内容,但是我不知道怎么通过url新建一个Capybara对象, http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Simple 这个native参数到底是什么,也没有任何示例代码,完全看不懂啊

共收到 9 条回复

可以试试用 phantom.js http://phantomjs.org/ load the page first and crawl the content

#1楼 @leozwa 这个是js的库啊,我想用ruby实现啊

你研究下他们的请求,肯定有一个接口可以直接给 JSON 的

js生成的比直接的网页麻烦,ruby的成熟库我没发现,可以试着用python的写api,ruby调用。或者上面提到的基于webkit的phantomjs,然后ruby调用。

@cicholgricenchos 用watir-webdriver模拟浏览器动作,如果是服务器端的脚本的话,再加个headless就搞定了。

http://rockylaw.me/blog/2014/04/05/use-headless-watir-webdriver-and-nokogiri-to-get-the-back-content-of-ajax/

#2楼 @cicholgricenchos 这个不是js的库,准确的说是一个js解释器,通过解释运行js代码,获得通过js加载的数据
现在抓取js显示的内容好像还真没什么特别好的办法,一般都是把js跑一遍让内容显示出来,总不可能用Ruby去实现一个js的解释器吧,那不得慢死

#5楼 @rockliu watir昨天研究了一下,确实可以实现

#5楼 @rockliu 我试了一下,如果在服务器上使用了headless,并且想获得ajax返回的content的话,貌似不可能吧,即使你使用了wait

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册