获取标题标记后的内容(Ruby)
我试图找到一种方法,将内容直接拉到标题标记下面,并根据标题文本将其分组到一个数组中 我想我找到了一个与此非常类似的解决方案,但它不起作用,我想知道这是否是因为我从中抓取的网站没有将“li”对象分组到“ul”标记中 我的代码:获取标题标记后的内容(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
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]