如何实现 Ruby 和 Nodejs 通信

Python017

如何实现 Ruby 和 Nodejs 通信,第1张

一种方法是直接在Ruby里跑命令行node app.js arg1 arg2,但略挫了点,而且Nodejs的代码里是有数据库/redis连接的,每次重新连接,是不是会造成额外的开销?

另一种方法是通过Unix Domain Socket

Ruby中爬虫的实现

Ruby中实现网页抓取,一般用的是mechanize,使用非常简单。 安装

sudo gem install mechanize

抓取网页

require 'rubygems'

require 'mechanize'

agent = Mechanize.new

page = agent.get('http://google.com/')

模拟点击事件

page = agent.page.link_with(:text =>'News').click

模拟表单提交

google_form = page.form('f')

google_form["q"] = 'ruby mechanize'

page = agent.submit(google_form, google_form.buttons.first)

pp page

分析页面,mechanize用的是nokogiri解析网页的,所以可以参照nokogiri的文档

table = page.search('a')

text = table.inner_text

puts text

有几点注意的地方: 如果需要先登录的网页,那么可以在网站先登录,登录后记录JSESSIONID,然后赋值给agent

cookie = Mechanize::Cookie.new("JSESSIONID", "BA58528B76124698AD033EE6DF12B986:-1")

cookie.domain = "datamirror.csdb.cn"

cookie.path = "/"

agent.cookie_jar.add!(cookie)

如果需要保存网页,使用.save_as,(或许save也可以,我没试过)例如

agent.get("google.com").save_as

这个是因为没有javascript语言运行环境引起的,安装一个javascript语言运行环境就能解决,比如nodejs,或者在windows下直接使用railsinstaller安装rails就会自带javascript运行环境