#!/usr/bin/env perl use strict; use warnings; use Mojo::DOM; use Mojo::Util qw/spurt/; use Mojo::JSON qw/encode_json/; use Mojo::UserAgent; use 5.020; use experimental 'postderef'; my $dom = Mojo::UserAgent->new->get('http://time.is/time_zones')->res->dom; my @tzs; for my $d ( $dom->find('.section')->each ) { my $tz = { offset => $d->at('h1')->all_text }; my @countries = Mojo::DOM->new($d) ->wrap('')->find('zof > * > div > ul > li ')->each; for my $cont_d ( @countries ) { my $name = $cont_d->children('a')->first->all_text; my @cities = $cont_d->find('li a')->map('all_text')->to_array->@*; push $tz->{countries}->@*, +{ name => $name, cities => \@cities, }; } push @tzs, $tz; } spurt encode_json(\@tzs) => 'tzs.json'; __END__

UTC-9