gpt4 book ai didi

ruby - 如何使用带有 nokogiri 的 XPath 解析 for 循环中的 inner_html

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

我在仅找到的 inner_html 的 for 循环内解析时遇到问题。我只想在该内容中再次使用 XPath。我是 ruby​​ 的新手,所以有更好的解决方案。

#!/usr/bin/ruby -w

require 'rubygems'
require 'nokogiri'

page1 = Nokogiri::HTML(open('mycontacts.html'))


# Search for nodes by xpath
page1.xpath('//html/body/form/div[2]/span/table/tbody/tr').each do |row|
#puts a_tag.content
puts "new row"
row_html = row.inner_html

puts row_html
puts ""

name = row_html.xpath("/td[1]").text
puts "name is " + name

end

for 循环中每一行的输出如下:

new row
<th>First Name</th>
<th>Last Name</th>
<th>Phone</th>

这是我遇到的错误:

screen-scraper.rb:20:in block in <main>': undefined method xpath' for # (NoMethodError)

我想解析每个 tr 并获取如下数据:Barney Rubble、Fred Flintstone

<table>
<tbody>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
<tr>
<td>Fred</td>
<td>Flintstone</td>
</tr>
<tr>
<td>Barney</td>
<td>Rubble</td>
</tr>
</tbody>
</table>

我乐于接受建议。我认为只解析 for 循环内的 inner_html 会更容易,但如果有更简单的方法来获取 for 循环内的节点,那也可以。

谢谢....

最佳答案

您可以修复它而不是使用 name = row_html.xpath("/td[1]").text , 使用 name = Nokogiri::HTML(row_html).xpath("/td[1]").text .尽管如果您与您共享完整的 HTML,这是一种很好的技术。

Nokogiri::HTML(row_html)会给你类的实例 Nokogiri::HTML::Document .现在#xpath , #css#search所有的方法都是Nokogiri::HTML::Document的实例方法类。

考虑到如果您的 inner_html产生 HTML你提供的表格,那么你可以这样想。

我确实测试了代码,希望它能给你结果:

require "nokogiri"

doc = Nokogiri::HTML(<<-eohl)
<table>
<tbody>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
<tr>
<td>Fred</td>
<td>Flintstone</td>
</tr>
<tr>
<td>Barney</td>
<td>Rubble</td>
</tr>
</tbody>
</table>
eohl

doc.css("table > tbody > tr"). each do |nd|
nd.children.each{|i| print i.text.strip," " unless i.text.strip == "" }
print "\n"
end
# >> First Name Last Name
# >> Fred Flintstone
# >> Barney Rubble

现在看这里是什么#inner_html给出,这反过来会回答你为什么你得到那个没有这样的方法错误:

require "nokogiri"

doc = Nokogiri::HTML(<<-eohl)
<table>
<tbody>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
<tr>
<td>Fred</td>
<td>Flintstone</td>
</tr>
<tr>
<td>Barney</td>
<td>Rubble</td>
</tr>
</tbody>
</table>
eohl

doc.search("table > tbody > tr"). each do |nd|
p nd.inner_html.class
end

# >> String
# >> String
# >> String

关于ruby - 如何使用带有 nokogiri 的 XPath 解析 for 循环中的 inner_html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194043/

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