获取标题标记后的内容(Ruby)

获取标题标记后的内容(Ruby),ruby,css-selectors,nokogiri,Ruby,Css Selectors,Nokogiri,我试图找到一种方法,将内容直接拉到标题标记下面,并根据标题文本将其分组到一个数组中 我想我找到了一个与此非常类似的解决方案,但它不起作用,我想知道这是否是因为我从中抓取的网站没有将“li”对象分组到“ul”标记中 我的代码: require 'Nokogiri' require 'open-uri' BASE_URL = "https://www.hornellanimalshelter.org/donate.html" doc = Nokogiri::HTML(open(BASE_URL

我试图找到一种方法,将内容直接拉到标题标记下面,并根据标题文本将其分组到一个数组中

我想我找到了一个与此非常类似的解决方案,但它不起作用,我想知道这是否是因为我从中抓取的网站没有将“li”对象分组到“ul”标记中

我的代码:

require 'Nokogiri'
require 'open-uri' 

BASE_URL = "https://www.hornellanimalshelter.org/donate.html"

doc = Nokogiri::HTML(open(BASE_URL))

cats = doc.search('.box-09_cnt h4')  
cats_and_items = cats.map{ |cat|  
    items = cat.next_element.search('li')  
    {name: cat.text, items: items.map(&:text)}  
}

=> [{:name=>"Toys & Enrichment", :items=>[]}, {:name=>"Office 
Supplies", :items=>[]}, {:name=>"Cleaning Supplies", :items=>[]}, 
{:name=>"Food & Treats", :items=>[]}, {:name=>"Kennel Care", :items=> 
[]}, {:name=>"& More!", :items=>[]}]
正如您在上面所看到的,它不会拉动任何li,但它似乎可以很好地处理以下简单的问题:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<h4>Alabama</h4>
<ul>
<li><a href="//auburn.craigslist.org/">auburn</a></li>
<li><a href="//bham.craigslist.org/">birmingham</a></li>
</ul>
<h4>Alaska</h4>
<ul>
<li><a href="//anchorage.craigslist.org/">anchorage / mat-su</a></li>
<li><a href="//fairbanks.craigslist.org/">fairbanks</a></li>
</ul>
EOT

states = doc.search('h4')

states_and_cities = states.map{ |state|
    cities = state.next_element.search('li a')
    [state.text, cities.map(&:text)]
}.to_h

states_and_cities
# => {"Alabama"=>["auburn", "birmingham"],
#     "Alaska"=>["anchorage / mat-su", "fairbanks"]}
需要“nokogiri”
doc=Nokogiri::HTML([“奥本”、“伯明翰”],
#“阿拉斯加”=>[“安克雷奇/马特苏”,“费尔班克斯”]]
有什么想法吗?非常感谢!

类似这样的想法可能(未经测试):

然后获取散列:

h = Hash[data]

你的问题是什么?
h = Hash[data]