[#46595] nokogiriがインストールできない — Soichi Ishida <zau_777_emacs@...>
7 messages
2009/12/02
[#46602] プログラミング学習について — 清重 愛一郎 <loveone6@...>
初めまして、清重愛一郎と申します。大学生です。
10 messages
2009/12/03
[#46608] Ruby Shoesはどこからdownloadできますか? — 島村竜一 <shimamura@...>
はじめまして
6 messages
2009/12/05
[#46621] エラー([BUG])の追いかけ方 — "(株)ネットフォレスト 植田裕之" <ueda@...>
植田と申します。
6 messages
2009/12/07
[#46639] 動的HTMLからデータを取得 — Soichi Ishida <zau_777_emacs@...>
7 messages
2009/12/16
[#46647] RubyでWindowsの常駐サービスプログラムを作る方法 — kouichi_someya@...
はじめまして。
12 messages
2009/12/16
[#46649] Re: RubyでWindowsの常駐サービスプログラムを作る方法
— "U.Nakamura" <usa@...>
2009/12/17
こんにちは、なかむら(う)です。
[#46651] Re: RubyでWindowsの常駐サービスプログラムを作る方法
— 田口 浩 <h-taguchi@...>
2009/12/17
田口と申します。
[#46650] xpathについて — Soichi Ishida <zau_777_emacs@...>
6 messages
2009/12/17
[#46666] TCPSocket#peeraddr に時間がかかる。 — "5.5" <5.5@...>
5.5 です。
6 messages
2009/12/19
[#46667] Ruby/TkのTkHTMLを扱う際にsegmentation fault — 上野宏法 <ronor.u@...>
はじめまして。Ronorと申します。
5 messages
2009/12/19
[#46673] Ruby/GTK2でキー入力イベントをソフトウェア的に発生できません。 — Tomokiyo Nomura <tnomura@...>
野村@延岡です。
4 messages
2009/12/20
[#46674] 子プロセスを kill する方法は? — "Hideo Konami" <konami@...>
小波です。
7 messages
2009/12/21
[#46690] Float::INFINITY — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
きしもとです
10 messages
2009/12/22
[#46699] requireについて — 北村寛 <kitayuta@...>
GyRCS0xCPCRIPz0kNyReJDkhIxsoQgpMaW51eBskQiRKJEkkTjRENi0kRyEiGyhCfi8bJEIkSxso
6 messages
2009/12/25
[ruby-list:46659] Re: xpathについて
From:
Soichi Ishida <zau_777_emacs@...>
Date:
2009-12-17 05:14:55 UTC
List:
ruby-list #46659
ご返事ありがとうございます。
今更ですが
ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-linux-lp]
gem1.8 -v
1.3.5
gem1.8 list nokogiri
*** LOCAL GEMS ***
nokogiri (1.4.0)
一つエントリを取得するのは成功しました。
--------------------
#! ruby -Ke
require 'rubygems'
require 'open-uri'
require 'nokogiri'
url = "http://www11.ocn.ne.jp/~kui168/link37.html"
doc = Nokogiri::HTML(open(url).read)
p xpath = doc.xpath("/html/body/div[@id='Layer2']/table/tbody/tr[2]/td[1]/b/font/font").text()
--------------------
Firefoxのxpather便利ですね。ビックリしました。
今度はループで全部取得したいわけですが、どうやら二ヶ所指定が必要みたいです。
'Layer#{num}'
tr[#{num}]
そして最後の /font/font が /font だけだったり…
とりあえず片方だけループしてみたんですが
--------------------
#! ruby -Ke
require 'rubygems'
require 'open-uri'
require 'nokogiri'
url = "http://www11.ocn.ne.jp/~kui168/link37.html"
vals = []
doc = Nokogiri::HTML(open(url).read)
i = 0
doc.xpath("/html/body/div[@id='Layer#{i}']/table/tbody/tr[2]/td[1]/b/font/font").each do |entry, i|
vals << entry.text()
end
p vals
--------------------
もちろんダメです(汗)配列は空っぽです。とくにxpathの最後の部分はどう処理するか検討もつきません。
助言お願い致します。
soichi
okkez <okkez000@gmail.com> writes:
> okkez です。
>
> 2009年12月17日9:17 Soichi Ishida <zau_777_emacs@kki.biglobe.ne.jp>:
>>
>> soichi です。
>>
>> ruby 1.8.6
>> ubuntu 8.04
>> です。
>
> この情報よりも ruby -v の実行結果を貼ってもらった方が助かります。
> また使用しているライブラリのバージョンもあるとより良いです。
> gem -v
> gem list nokogiri
> など。
> # 特に Nokogiri は最近、新しいバージョンがリリースされたばかりなので。
>
>>
>> 先日は失礼しました。勉強不足でした。
>> xpathに関して質問させてください。
>>
>> http://www11.ocn.ne.jp/~kui168/link37.html
>>
>> のページから東証一部の企業データベースを作るために、企業コードと企業名、そして種類(水産、機械など)を取り出したいと思います。(CSVファイルは探せばあるんですが、自分のRuby とHTMLの勉強のためにやってます。)
>>
>> 最終的にはdo end ループでhtmlの枝先を集めていくんでしょうが、最初の一つだけを拾ってみようとこんな感じにしてみましたが、まったくダメです。
>> --------------------
>> require 'rubygems'
>> require 'open-uri'
>> require 'nokogiri'
>> require 'kconv'
>> $KCODE = "utf8"
>> url = "http://www11.ocn.ne.jp/~kui168/link37.html"
>>
>> doc = Nokogiri::HTML(open(url).read.toutf8)
>> xpath = doc.at('/TABLE/TBODY/TR') #ここで最初の一つを取り出せるかと思ったんです
>> p doc.xpath(xpath).text()
>> --------------------
>
>
> xpath は関係ないです。
> Nokogiri は charset を見て(?)自動的に文字コードを変換してくれるので toutf8 が不要です。
> # 読み込んだ html に charset 指定があればですが。
>
> つまり今回は読もうとした文字列の文字コードと html に指定されていた charset が異なっているので
> 意図どおりにパース出来ていませんでした。(正しいオブジェクトができていなかった)
>
>>
>> まず、xpath の指定なんですが、
>> /TABLE/TBODY/TR
>> か
>> /TABLE/TBODY/TR/TD
>> かで迷います。どちらも出来なんですが(汗)
>
> どっちも間違ってます。
> //table[1]/tbody/tr[1]/td[1] とか //div[@id='Layer2']/table/tr[1]/td[1]
> とかじゃないでしょうか。
> # xpather などの Firefox addon を使うと簡単に xpath を確認できます。
>
> Layer2 の部分を変えていけばすべての種類について情報を得ることができると思います。
>
>
>
> --
> okkez
> okkez000@gmail.com