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

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

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

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

XPath(XML Path)

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

Q&A

解決済

1回答

345閲覧

nokogiriでスクレイピングがしたい

trrn2011

総合スコア28

Ruby

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

XPath(XML Path)

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

0グッド

0クリップ

投稿2018/07/19 09:09

rubyを使ってスクレイピングがしたいのnokogiriというライブラリを使っています。
xpathを指定して

[#<Nokogiri::XML::Attr:0x111d108 name="href" value="/lpereira/lwan">]

このようなオブジェクトは取得できたのですが、ここからvalueにある文字列を取得する方法がわかりません。

require

1require 'open-uri' 2 3 4 5 6url = 'https://github.com/trending' 7 8charset = nil 9html = open(url) do |f| 10 charset = f.charset 11 f.read 12end 13 14 15doc = Nokogiri::HTML.parse(html, nil, charset) 16 17 18doc.xpath('//li[@class="col-12 d-block width-full py-4 border-bottom"]').each do |node| 19 p node.xpath('//h3/a/@href') 20end

こちらがコードになります。

スクレイピングしたいのは
https://github.com/trending
こちらのページです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、XMLが間違っています。
node.xpath('//h3/a/@href')で、nodeの中のh3を探しているつもりでしょうが、これだとドキュメント全体からh3を探します。
nodeの中から探したいときは、node.xpath('.//h3/a/@href')です。

hrefのテキストが欲しいのであれば、

Ruby

1node.xpath('.//h3/a/@href')[0].text 2node.xpath('.//h3/a')[0]['href']

投稿2018/07/19 09:34

otn

総合スコア84499

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

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

trrn2011

2018/07/22 08:29

回答ありがとうございます。 [0]は何を指定しているのですか?
otn

2018/07/22 08:57

xpathメソッドは、合致した要素の配列を返すので、その先頭要素を取ります。
trrn2011

2018/07/22 09:01

なるほど、配列で返してくるのですね! ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問