我正在使用Nokogiri作为一个简单的例子来获得邮政编码的议会税收(http://www.voa.gov.uk/cti/InitS.asp?lcn=0)
这是我目前的代码:
a = Mechanize.new{ |agent| agent.user_agent_alias = 'Mac Safari'}
a.get('http://www.voa.gov.uk/cti/InitS.asp?lcn=0') do |page|
form = page.form_with(:id => "frmInitSForm")
form.txtPostCode = "NN15 6UA"
page = a.submit form
page.search("tr").each do |tr|
textF = tr.text.strip
textF.gsub!(/[\n]+/, "\n")
puts textF
end
end
end
此时打印出tr
然后我需要在do
内部类似于
tdFirst = tr.children("td:first").text
tdSecond = tr.children("td:nth-child(2)").text
如何获得first
和second
td?
答案 0 :(得分:2)
当使用nokogiri时,如果你已经有tr
,那么你可以使用
tds = tr.xpath('td')
first = tds[0].text
second = tds[1].text
答案 1 :(得分:2)
在你的内部区块中,尝试
tdFirst, tdSecond = tr.xpath('td')[0,2].map {|td| td.inner_text.strip}
puts "%s; %s" % [tdFirst, tdSecond]
答案 2 :(得分:2)
比获取所有TD然后削减它更好,你可以像这样使用XPath:
td1, td2 = tr.xpath('td[1 or 2]').map(&:text).map(&:strip)
或CSS:
td1, td2 = tr.css('td:nth-child(1),td:nth-child(2)').map(&:text).map(&:strip)