HREF值使用Ruby搜索网页

时间:2013-01-09 18:55:07

标签: ruby

我正在开发第三方应用程序,我只能查看网页源内容。从那里我只收集一些href内容值,其格式类似/aems/file/filegetrevision.do?fileEntityId。可能吗?

HTML * (HTML的一部分) *

<td width="50%">
<a href="/aems/file/filegetrevision.do?fileEntityId=10597525&cs=9b7sjueBiWLBEMj2ZU4I6fyQoPv-g0NLY9ETqP0gWk4.xyz">
screenshot.doc
</a>
</td>

2 个答案:

答案 0 :(得分:2)

轻松:

require 'nokogiri'

html = '
<td width="50%">
<a href="/aems/file/filegetrevision.do?fileEntityId=10597525&cs=9b7sjueBiWLBEMj2ZU4I6fyQoPv-g0NLY9ETqP0gWk4.xyz">
screenshot.doc
</a>
</td>
'

doc = Nokogiri::HTML(html)
doc.search('a[href]').map{ |a| a['href'] }

返回:

[
    [0] "/aems/file/filegetrevision.do?fileEntityId=10597525&cs=9b7sjueBiWLBEMj2ZU4I6fyQoPv-g0NLY9ETqP0gWk4.xyz"
]

如果要过滤路径匹配,请使用以下内容:

pattern = Regexp.escape('/aems/file/filegetrevision.do?fileEntityId')
doc.search('a[href]').map{ |a| a['href'] }.select{ |href| href[ %r[^#{ pattern }] ] }

再次回归:

[
  [0] "/aems/file/filegetrevision.do?fileEntityId=10597525&cs=9b7sjueBiWLBEMj2ZU4I6fyQoPv-g0NLY9ETqP0gWk4.xyz"
]

此代码将返回文档中href标记<a>的所有href参数。在第二个示例中,它将按路径过滤它们。

答案 1 :(得分:1)

require 'open-uri'
source='http://www.example.com'
page = open(source).read
URI.extract(page,/.*\/aems\/file\/filegetrevision.do?fileEntityId=.*/)