2012-05-09 9 views
0

簡単な例として、Nokogiriを使って、郵便番号の議会税バンドを取得しています(http://www.voa.gov.uk/cti/InitS.asp?lcn=0 )各trと最初の2つの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 

瞬間に、これは私が、その後

と類似 do何か内部で必要 tr

内のすべてのテキストを出力しますが、

firstsecondはどうすれば入手できますか?

答えて

2

を使用することができ、鋸山使用して、すべてのTDを取得し、その後、あなたがダウンして、それをすることができますペアリングより

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

が最も適用性の高い回答でした。歓声@ダン – rickyduck

2

すでにtrを得た場合、あなたはあなたの内側のブロックで

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

ベターしてみてくださいそうのような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

関連する問題