我想使用nokogiri循环遍历html并创建一个对应于每一行的对象。我能够定义根xpath,我希望数据填充对象varibles来自但我不知道如何将这些组合为一个对象。
我的代码如下。我知道它不起作用,但我不知道要使它工作的方向。
要求'rubygems' 要求'nokogiri'
doc = Nokogiri :: HTML.parse(<<< -HTML_END) “ LV1LV2LV3 MV1MV2MV3 NV1NV2NV3 “ HTML_END
班级邮报 def初始化(v1,v2,v3) @ v1 = v1 @ v2 = v2 @ v3 = v3 端
def v1= (v1)
@v1 =v1
end
def v2
@v2 =v2
end
def v3
@v3 =v3
end
端
类PostList def初始化 @posts = Array.new 端
def append(aPost)
@posts.push(aPost)
self
end
def deleteFirst
@posts.shift
end
def deleteLast
@posts.pop
end
端
list = PostList.new
parent = doc.css('body')。first
parent.xpath(“// div / table [@ class ='ipbtable'] / tr”)。do do do | a_tag |
k1 =“x” k2 =“x” k3 =“x”
a_tag.xpath(“td [1]”)。每个都执行| x_tag |
将x_tag.content
放入端
list.append(Post.new(k1,k2,k3))
端
答案 0 :(得分:3)
代码的主要问题似乎是你传递的字符串('K1', 'K2', 'K3'
)模糊地类似于变量的名称而不是变量本身(k1, k2, k3
)。但是,您可以更简洁地表达:
doc.search('table > tr').each do |row|
properties = row.search('td/text()').collect {|text| text.to_s}
list.append Post.new(*properties)
end
这只是循环遍历每一行,并使用行中每个td的文本内容创建一个Post。