質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

Q&A

解決済

2回答

1553閲覧

rubyでウェブスクレイピング 

shigahi

総合スコア21

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

0グッド

0クリップ

投稿2016/10/31 05:25

編集2016/11/01 07:16

###前提・実現したいこと
rubyでウェブスクレイピングを行って抽出したいデータがあるのですが、Xpathがあまり理解できず、うまくいきません。

###発生している問題・エラーメッセージ
該当のソースコード欄に抽出したいデータが記載されているページのソースを載せたので、
教えて下さい。よろしくお願い致します。

###該当のソースコード

<div class="datas" > <table id="sphygmomanometertable" class="datalist"> <tr id="listTr13" class="day13">
<td class="day">13</td> <td class="week">水</td> <td class="memo">&nbsp;</td> <td class="btnAdd"></td> <td class="time">13:44</td> <td class="pressureMax"><span>93</span></td> <td class="pressureSplit">/</td> <td class="pressureMin"><span>59</span></td>←抽出したいデータ <td class="pulse_rate"><span>77</span></td>←抽出したいデータ
<td class="takeMedicine"><input type="radio" name="take_medicine[13]" id="radio13-1" value="1" readonly="readonly" disabled="disabled" /></td> <td class="notTakeMedicine"><input type="radio" name="take_medicine[13]" id="radio13-2" value="2" readonly="readonly" disabled="disabled" /></td> <td class="bpmemo"></td> <td class="btnDelete">&nbsp;<input type="hidden" id="day13" name="day[13]" value="13" /><input type="hidden" class="auto_flg" id="auto_flg13" name="auto_flg[13]" value="1" /><input type="hidden" id="day_group13" name="day_group[13]" value="13" /><input type="hidden" name="measure_start[13]" value="" /></td> </tr>

###試したこと
rubyでnokogiriを使ってウェブスクレイピングしようとしています。
回答していただいたソースを参考に少し書いてみました。

doc = Nokogiri::HTML.parse(html, nil, charset)
doc.xpath(//[@id="listTr13"]/td[@class="pressureMin"]/span).each do |node|
doc.xpath(//
[@id="listTr13"]/td[@class="pulse_rate"]/span).each do |node|
p node.xpath('').text←ここの部分も何を入れていいのか分かりません。
end

何かアドバイスがあったらでいいので、教えていただけたら嬉しいです。
勉強不足で申し訳ありません。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

これ見ればわかるかなと思いますがいかがですか?

http://qiita.com/niusounds/items/8932790c77d781aa8993

投稿2016/10/31 06:38

kousuketanihata

総合スコア119

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shigahi

2016/11/01 07:10

回答ありがとうございます! 参考にさせていただきます!
guest

0

ベストアンサー

書き方は色々あると思いますが

xpath

1//*[@id="listTr13"]/td[@class="pressureMin"]/span

xpath

1//*[@id="listTr13"]/td[@class="pulse_rate"]/span

でどうでしょう?


Nokogiriを使われているとの事なので

ruby

1doc.xpath('//*[@id="listTr13"]/td[@class="pressureMin"]/span').text 2doc.xpath('//*[@id="listTr13"]/td[@class="pulse_rate"]/span').text

ですね。

xpathは文字列(String)で指定するので '' または "" で囲む必要があります。

ruby

1doc.xpath('//*[@id="listTr13"]/td[@class="pressureMin"]/span')

Nokogiri::XML::NodeSet という Array のようなものを返しますが 1つしか node がない事がわかっているのであればいきなり .text で取り出しても大丈夫です。

もちろん厳密に .first.text としても大丈夫です。

投稿2016/10/31 07:25

編集2016/11/01 07:43
hana-da

総合スコア1728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shigahi

2016/11/01 06:49

回答ありがとうございます! これは、//からそのまま書いてよろしいですか?
hana-da

2016/11/01 07:09

rubyの何を使っているのかわからないので何ともいえないですが、爆発したりはしないと思うので色々やってみてください。
shigahi

2016/11/01 07:09

doc = Nokogiri::HTML.parse(html, nil, charset) doc.xpath(//*[@id="listTr13"]/td[@class="pressureMin"]/span).each do |node| doc.xpath(//*[@id="listTr13"]/td[@class="pulse_rate"]/span).each do |node| こんな感じで大丈夫でしょうか? 何も分かっていなくて申し訳ありません。
hana-da

2016/11/01 07:12 編集

コメント欄で質問するとわけがわからなくなるので別の質問を立てるか、質問欄を編集してちゃんと書いてもらった方が回答しやすいです。
hana-da

2016/11/01 07:13

なんとなく別の質問になる気がするので新規に別の質問の方がキレイなような気もする。。
shigahi

2016/11/01 07:17

すみません。試したことに編集してしまったのですが、 新しく質問し直します。。 申し訳ありませんでした。
hana-da

2016/11/01 07:24

あ。書いちゃったんならここでもいいでうよ
shigahi

2016/11/02 03:36

丁寧に回答していただきありがとうございました! 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問