我设法用Mechanize填写表单并获取链接列表。 部分结果如下:
[
#<Mechanize::Page::Link "View" "/cgi-bin/dcdev/forms/C00508200/800329/">,
#<Mechanize::Page::Link "View" "/cgi-bin/dcdev/forms/C00487363/800634/">,
#<Mechanize::Page::Link "View" "/cgi-bin/dcdev/forms/C00498097/800463/">
]
我无法弄清楚下一步是什么。
/sa/ALL
,例如:/cgi-bin/dcdev/forms/C00508200/800329/sa/ALL
。如何在每个链接的末尾添加sa/ALL
?答案 0 :(得分:1)
这是你钓鱼的方式......
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<body>
<a href="/cgi-bin/dcdev/forms/C00508200/800329/">
<a href="/cgi-bin/dcdev/forms/C00487363/800634/">
<a href="/cgi-bin/dcdev/forms/C00498097/800463/">
</body>
</html>
EOT
hrefs = doc.search('a').map{ |a| a['href'] + '/sa/ALL' }
Mechanize在内部使用Nokogiri作为HTML解析器。您可以使用以下内容访问doc
Mechanize:
require 'mechanize'
agent = Mechanize.new
page = agent.get('http://www.example.net')
证明我们正在处理Nokogiri文件:
page.parser.class # => Nokogiri::HTML::Document < Nokogiri::XML::Document
获取页面中的链接进行操作:
page.parser.search('a').map(&:to_html)
返回:
[
[ 0] "<a href=\"/\"><img src=\"/_img/iana-logo-pageheader.png\" alt=\"Homepage\"></a>",
[ 1] "<a href=\"/domains/\">Domains</a>",
[ 2] "<a href=\"/numbers/\">Numbers</a>",
[ 3] "<a href=\"/protocols/\">Protocols</a>",
[ 4] "<a href=\"/about/\">About IANA</a>",
[ 5] "<a href=\"/go/rfc2606\">RFC 2606</a>",
[ 6] "<a href=\"/about/\">About</a>",
[ 7] "<a href=\"/about/presentations/\">Presentations</a>",
[ 8] "<a href=\"/about/performance/\">Performance</a>",
[ 9] "<a href=\"/reports/\">Reports</a>",
[10] "<a href=\"/domains/\">Domains</a>",
[11] "<a href=\"/domains/root/\">Root Zone</a>",
[12] "<a href=\"/domains/int/\">.INT</a>",
[13] "<a href=\"/domains/arpa/\">.ARPA</a>",
[14] "<a href=\"/domains/idn-tables/\">IDN Repository</a>",
[15] "<a href=\"/protocols/\">Protocols</a>",
[16] "<a href=\"/numbers/\">Number Resources</a>",
[17] "<a href=\"/abuse/\">Abuse Information</a>",
[18] "<a href=\"http://www.icann.org/\">Internet Corporation for Assigned Names and Numbers</a>",
[19] "<a href=\"mailto:iana@iana.org?subject=General%20website%20feedback\">iana@iana.org</a>"
]
抓住并改变他们:
links = page.parser.search('a').map{ |a| a['href'] + 'sa/ALL' }
[
[ 0] "/sa/ALL",
[ 1] "/domains/sa/ALL",
[ 2] "/numbers/sa/ALL",
[ 3] "/protocols/sa/ALL",
[ 4] "/about/sa/ALL",
[ 5] "/go/rfc2606sa/ALL",
[ 6] "/about/sa/ALL",
[ 7] "/about/presentations/sa/ALL",
[ 8] "/about/performance/sa/ALL",
[ 9] "/reports/sa/ALL",
[10] "/domains/sa/ALL",
[11] "/domains/root/sa/ALL",
[12] "/domains/int/sa/ALL",
[13] "/domains/arpa/sa/ALL",
[14] "/domains/idn-tables/sa/ALL",
[15] "/protocols/sa/ALL",
[16] "/numbers/sa/ALL",
[17] "/abuse/sa/ALL",
[18] "http://www.icann.org/sa/ALL",
[19] "mailto:iana@iana.org?subject=General%20website%20feedbacksa/ALL"
]
您应该使用哪些链接来确定以及如何重新获取这些链接,这对您来说是一种练习。
答案 1 :(得分:0)
page.links.each do |link|
agent.get(link.href + 'sa/ALL').save
end