собрать данные из jsp web с помощью Nokogiri или других инструментов ruby? - PullRequest
0 голосов
/ 21 апреля 2010

есть веб jsp: http://xbrl.cninfo.com.cn/XBRL/allinfo.jsp?stkid=000002&getyear=2005&nowpage=Info.jsp&reportType=GB0110 могу ли я удалить данные из него с помощью Nokogiri или других инструментов ruby?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2010

Даже если вопрос заслуживает отрицательного голосования, я думаю, что нет необходимости писать анализатор самостоятельно, потому что есть JavaScript. Я сам кодировал скребки, где данные в Javascript. В Ruby есть библиотеки для оценки js (spidermonkey, johnson). Что-то вроде этого, однако это может привести к сбою интерпретатора js, не выяснил почему, но я бы предположил, что китайский язык

require 'rubygems'
require 'nokogiri'
require 'johnson'
require 'open-uri'

base_url = 'http://xbrl.cninfo.com.cn/XBRL'
page_url = base_url + '/allinfo.jsp?stkid=000002&getyear=2005&nowpage=Info.jsp&reportType=GB0110'

doc = Nokogiri::HTML(open(page_url))

doc.xpath("html/head/script").each do |el|
  src = el.attributes['src']
  if not src.text.empty?
    # load remote js
    Johnson.evaluate(open(base_url + '/' + src).read)
  else
    Johnson.evaluate(el.text)
  end
end

puts Johnson.evaluate("arrallvalues[0]")
0 голосов
/ 21 апреля 2010

В основном, да, если владелец сайта разрешил вам сделать это.

, но похоже, что данные в javascript похожи на

...
arrallvalues[18].addValuesbyfisId('0.842');
arrallvalues[19].addYearsbyfisId('2005年');
arrallvalues[19].addYearsbyfisId('2006年');
arrallvalues[19].addYearsbyfisId('2007年');
arrallvalues[19].addYearsbyfisId('2008年');
arrallvalues[19].addYearsbyfisId('2009年');
arrallvalues[19].addValuesbyfisId('21992392061.30');
arrallvalues[19].addValuesbyfisId('49919840381.13');
arrallvalues[19].addValuesbyfisId('100094467908.29');
arrallvalues[19].addValuesbyfisId('119236579721.09');
arrallvalues[19].addValuesbyfisId('137608554829.39');
arrallvalues[20].addYearsbyfisId('2005年');
arrallvalues[20].addYearsbyfisId('2006年');
arrallvalues[20].addYearsbyfisId('2007年');
arrallvalues[20].addYearsbyfisId('2008年');
...

Так что, я сомневаюсь, вы в конечном итоге будете писатьАнализатор себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...