我有以下HTML结构
<div id='my_categories'>
<ul>
<li><a href="1">Animals, Birds, & Pets</a></li>
<li><a href="2">Ask the Expert</a>
<ul>
<li><a href='21'>Health Care Providers</a></li>
<li><a href='22'>Influnza</a>
<ul>
<li><a href='221'>Flu Viruses (2)</a></li>
<li><a href='222'>Test</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
这就是网页的外观
我需要的是,我有一个类别表,其中包含category_name,category_url和parent_id字段。
我需要保存每个类别和子类别。 parent_id表示此子类别属于哪个类别。
如何使用此Hpricot解析此HTML结构并将数据保存到我的数据库。请帮忙
我的表格似乎是
id category_name category_url Parent_id
1 Animals, Birds, & Pets null null
2 Ask the expert null null
3 Health Care Providers null 2
4 Influenza null 2
5 Flu Viruses null 4
6 Test null 4
提前致谢
答案 0 :(得分:1)
以下代码对我有用......
doc = Hpricot(open(categories_page).read)
doc.search("ul/li").each do |li|
category = li.search('a[@href]').first.inner_text.gsub(/ *\(.*?\)/, '')
category_url = li.search('a').first[:href]
category = Category.find_or_create_by_name(category, :url => category_url)
puts "---------- #{category.name} ------------"
nodes = li.search("ul/li/a")
unless nodes.empty?
nodes.each do |node|
node_name = node.inner_text.gsub(/ *\(.*?\)/, '')
node_url = node.attributes['href']
sub_category = Category.find_by_name(node_name)
if sub_category.blank?
sub_category = Category.create(:name => node_name, :url => node_url, :parent_category_id => category.id)
puts " #{sub_category.name}"
else
sub_category.update_attribute('parent_category_id', category.id)
puts " #{category.name} --> #{sub_category.name}"
end
end
end
end