gpt4 book ai didi

html - Ruby 和 Nokogiri 解析表?

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:06 24 4
gpt4 key购买 nike

这是我的 HTML:

<tbody><tr><th>SHOES</th></tr>
<tr>
<td>
Shoe 1 <br>shoe 2<br> shoe3 <br>
</td>
</tr>
</tbody>

这是我的代码:

nodes = page.css("tr").select do |el|
el.css('th').text =~ /SHOES/
end

nodes.each do |value|
puts value.css("td").text
end

我希望获得值 shoe 1 , shoe 2shoe 3 , 但没有输出。我怀疑还有一个额外的 <tr></tr><tr><th>SHOES</th></tr>之间.或者是 <br>罪魁祸首?

还有其他结构如:

<tr>
<th>SHOES</th>
<td>NBA</td>
</tr>

我得到了想要的输出 "NBA" .

我做错了什么?

我有两种结构:

Name1: value
Name1: value2

以上将给出:

<tr>
<th>Name1</th>
<td>Value</td>
</tr>

但有时它是:

Name:
value
value2
value3

所以 HTML 是:

<tbody><tr><th>Name</th></tr>
<tr>
<td>value<br>value2<br> ....</td>

最佳答案

在 HTML 中,表格由行组成。当您遍历这些行时,只有其中一个是标题。虽然从逻辑上讲,您会看到正文行和标题行之间的关系,但对于 HTML(因此对于 Nokogiri)而言,它们之间没有关系。

如果您想要获取具有特定标题的单元格的每个值,您可以对特定列进行计数,然后从那里获取值。

使用此 HTML 作为源

html = '<tbody><tr><th>HATS</th><th>SHOES</th></tr>
<tr>
<td>
hat 1 <br>hat 2<br> hat3 <br>
</td>
<td>
Shoe 1 <br>shoe 2<br> shoe3 <br>
</td>
</tr>
</tbody>'

然后我们跟着得到右边的位置,在表格的第一行

page = Nokogiri::HTML(html)

shoes_position = page.css("tr")[0].css('th').find_index do |el|
el.text =~ /SHOES/
end

然后,我们在每隔一行的那个位置找到 s,并从中获取文本

shoes_tds = page.css('tr').map {|row| row.css('td')[shoes_position] }.compact
shoes_names = shoes_tds.map { |td| td.text }

我使用紧凑型删除 nil 值,因为第一行(带有标题的行)没有 td,因此返回 nil

关于html - Ruby 和 Nokogiri 解析表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com