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

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

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

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

可以试试用 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 昨天研究了一下,确实可以实现

#4 楼 @flowerwrong #6 楼 @hxtheone 嗯我去研究一下 phantom

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

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