1

サーバーからのHTMLにそのようなものがあります:

<html ...>
<head ...>
....
<link href="http://mydomain.com/Digital_Cameras--~all" rel="canonical" />

<link href="http://mydomain.com/Digital_Cameras--~all/sec_~product_list/sb_~1/pp_~2" rel="next" />
...
</head>
<body>
...
</body>
</html>

参照する必要があるページにナビゲートされたブラウザ オブジェクトが b に保持されている場合、rel="canonical"withb.html.include?ステートメントを見つけることができますが、この部分文字列が見つかった行全体を取得するにはどうすればよいでしょうか? そして、次の (空ではない) も必要です。

4

2 に答える 2

5

css-locator (または xpath) を使用してリンク要素を取得できます。

次の例では、「canonical」の rel 属性値を持つ link 要素の html (行) が返されます。

b.element(:css => 'link[rel="canonical"]').html
#=> <link href="http://mydomain.com/Digital_Cameras--~all" rel="canonical" />

「次の(空ではない)ものも必要です」とはどういう意味かわかりません。「next」の rel 属性値を持つものが必要な場合は、同様に行うことができます。

b.element(:css => 'link[rel="next"]').html
#=> <link href="http://mydomain.com/Digital_Cameras--~all/sec_~product_list/sb_~1/pp_~2" rel="next" />
于 2013-05-03T00:04:55.513 に答える
0

String#each_line各行を反復してb.htmlチェックするために使用できますrel=

b.goto('http://www.iana.org/domains/special')
b.html.each_line {|line| puts line if line.include? "rel="}

これにより、すべての文字列が返されるはずrel=です (ただし、属性<a>を持つタグなど、不要な行が返される可能性がありrelます)。

または、 nokogiriを使用して HTML を解析することもできます。

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://www.iana.org/domains/special"))
nodes = doc.css('link')
nodes.each { |node| puts node}
于 2013-05-02T22:05:58.437 に答える