2012-05-09 49 views
0

我使用Nokogiri作爲一個簡單的例子來獲得郵政編碼的議會稅圈(http://www.voa.gov.uk/cti/InitS.asp?lcn=0 )獲取每個tr然後前兩個td

下面是代碼我在此刻:

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裏面的東西全部文本

如何獲得firstsecond td?

回答

2

在你內心的塊,嘗試

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

是最適用的答案。歡呼@丹 – rickyduck

2

使用時引入nokogiri,如果你已經有了tr,那麼你可以使用

tds = tr.xpath('td') 
first = tds[0].text 
second = tds[1].text 
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) 
+0

非常感謝!很好的答案 – rickyduck