2

RubyとNokogiriでテーブルからデータをスクレイピングしたい。

要素はたくさんありますが、<td>要素の後のテキストである国だけが必要です<br>。問題は、<td>要素が異なることです。時には国だけではありません。

例えば:

<td><a href="#">Title1</a><br>USA</td>
<td><a href="#">Title2</a><br>Michael Powell<br>UK</td>
<td><a href="#">Title3</a><br>Leopold Lindtberg<br>Ralph Meeker<br>Switzerland</td>

</td>国は常に最後の要素であるため、終了タグの前の要素に対処したいと思います。

どうやってやるの?

4

2 に答える 2

2

私はこれを使用します:

require 'awesome_print'
require 'nokogiri'

html = '
<td><a href="#">Title1</a><br>USA</td>
<td><a href="#">Title2</a><br>Michael Powell<br>UK</td>
<td><a href="#">Title3</a><br>Leopold Lindtberg<br>Ralph Meeker<br>Switzerland</td>
'

doc = Nokogiri::HTML(html)
ap doc.search('td').map{ |td| td.search('text()').last.text }

[
    [0] "USA",
    [1] "UK",
    [2] "Switzerland"
]

問題は、解析される HTML に<td>タグの行がないことです。そのため、解析したいものを見つける必要があります。代わりに、それらはタグ間に散在し、場合によっては<tr>異なる<table>タグに散在します。あなたの HTML サンプルはドキュメントの真の構造を示していないため、これ以上お手伝いすることはできません。

于 2013-01-10T20:59:41.317 に答える
0

さまざまなソリューションがたくさんあります。標準ライブラリのみを使用する別の解決策は、不要なものを部分的に除外することです。

node_string = <<-STRING
  <td><a href="#">Title1</a><br>USA</td>
  <td><a href="#">Title2</a><br>Michael Powell<br>UK</td>
  <td><a href="#">Title3</a><br>Leopold Lindtberg<br>Ralph Meeker<br>Switzerland</td>
STRING
node_string.split("<td>").collect do |str| 
  last_str = str.split("<br>").last
  last_str.gsub(/[\n,\<\/td\>]/,'') unless last_str.nil?
end.compact
于 2013-01-10T21:05:57.680 に答える