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)来获取链接元素。

以下将返回 rel 属性值为“canonical”的链接元素的 html(将是行):

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

我不确定您所说的“我还需要下一个(不是空的)”是什么意思。如果你的意思是你想要 rel 属性值为“next”的那个,你可以类似地做:

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 回答