获取每个 tr,然后获取前两个 td



我正在使用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

如何获得firstsecond TD?

在你的内部块中,尝试

tdFirst, tdSecond = tr.xpath('td')[0,2].map {|td| td.inner_text.strip}
puts "%s; %s" % [tdFirst, tdSecond]

使用 nokogiri 时,如果您已经获得了 tr ,那么您可以使用

tds  = tr.xpath('td')
first = tds[0].text
second = tds[1].text

比获取所有 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)

相关内容

  • 没有找到相关文章

最新更新