The content I'm scraping includes some blank elements. I either need to stop variables being set if there is no data (preferable) or just do some surgery afterwards and completely delete hashes containing blanks.
Here's my scrape code:
eqs = []
nokogiri_page.xpath('//table/tr').each do |row|
  date = row.xpath('td[1]/a/text()').text.strip
  location = row.xpath('td[5]/text()').text.strip
  eqs.push(
    date: date,
    location: location
  )
end
Some of these are blank, and I can't know which beforehand. So I tried iterating over the array and deleting blank values with:
eqs.each do |event|
  event.reject! {|k, v| v.empty? || v=="  " || v=="" }
end
This successfully removes blank keys and values, but I am still left with the empty curly braces...
Output:
[
 {},
 {},
 {},
 {
    :date=>"2016-12-14 13:19:55",
    :location=>"Myanmar"
 },
 {
    :date=>"2016-12-13 17:57:04",
    :location=>"Northern Sumatra, Indonesia"
 }
]
I want to get rid of the empty hashes completely! Anyone know what I'm getting wrong here?
you can use Array#delete_if
arr = [{}, {}]
arr.delete_if &:empty?
# i.e. arr.delete_if { |hash| hash.empty? }
arr.empty?
# => true
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With