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