示例#1
0
def run(bot):
    with bot.pipe('klausimų-puslapiai'):
        with bot.pipe('dokumentų-sąrašas').select([
            '#page-content div.default b xpath:a[text()="dokumento tekstas"]/@href'
        ]).dedup():
            bot.pipe('dokumentų-puslapiai').download()

        with bot.pipe('susijusių-dokumentų-sąrašas').select([
            '#page-content div.default b xpath:a[text()="susiję dokumentai"]/@href'
        ]).dedup():
            bot.pipe('susijusių-dokumentų-puslapiai').download()

    with bot.pipe('dokumentų-puslapiai'):
        bot.pipe('metadata').select(row.key, call(dict, ['.basic .ltb', (strip(':text'), strip('b:text?'))])).dedup()

    with bot.pipe('dokumentų-puslapiai'):
        bot.pipe('texts').select(row.key, 'body > div:content').dedup()

    bot.pipe('metadata').export('data/lrs/dokumentai/metadata.csv', include=[
        'key',
        'Data:',
        'Rūšis:',
        'Kalba:',
        'Numeris:',
        'Statusas:',
    ])

    bot.pipe('texts').export('data/lrs/dokumentai/texts.csv', include=[
        'key',
        'value',
    ])

    bot.compact()
示例#2
0
def run(bot):
    with bot.pipe('posėdžių-puslapiai'):
        with bot.pipe('stenogramų-sąrašas').select(['.fakt_pos ul.list > li xpath:a[text()="Stenograma"]/@href']).dedup():
            bot.pipe('stenogramų-puslapiai').download()

    with bot.pipe('stenogramų-puslapiai'):
        bot.pipe('metadata').select(row.key, call(dict, ['.basic .ltb', (strip(':text'), strip('b:text?'))])).dedup()

    bot.pipe('metadata').export('data/lrs/stenogramos/metadata.csv', include=[
        'key',
        'Data:',
        'Rūšis:',
        'Kalba:',
        'Numeris:',
    ])

    bot.compact()
示例#3
0
def run(bot):
    pages = bot.pipe('index pages')
    data = bot.pipe('data')

    # years = range(1812, 1921, 5)
    # pages.append(extract_archive_pages(years))

    with pages:
        data.clean().reset().select('.inventoryLabel:text', {
            'fondas': '.upperHierarchyTreeInner xpath:a[1]/text()',
            'apyrašas': '.upperHierarchyTreeInner xpath:a[2]/text()',
            'data': call(dict, [
                '.inventoryBaseDataTable tr', (
                    'td[1]:content',
                    'td[2]:content',
                )
            ]),
        })
示例#4
0
def run(bot):
    start_url = 'http://vardai.vlkk.lt/'

    with bot.pipe('titulinio nuoroda').append(start_url).dedup():
        with bot.pipe('titulinis').download():
            with bot.pipe('puslapių nuorodos').select(['#siteMenu > li > a', ('@href', ':text')]).dedup():
                with bot.pipe('sąrašų puslapiai').download():
                    bot.pipe('vardų sąrašas').select([
                        'ul.namesList xpath:.//li/a[contains(@class, "Name")]', (
                            '@href', {
                                'gender': subst('@class', {'fName': 'f', 'mName': 'm'}),
                                'name': call(strip_accents, ':text'),
                            }
                        )
                    ]).dedup()

    # with bot.pipe('vardų sąrašas'):
    #     bot.pipe('vardų puslapiai').download()

    bot.compact()
示例#5
0
def run(bot):

    path = pathlib.Path('data/vilnius/vtaryba-git')
    if gitsync('https://github.com/vilnius/taryba.git', path):
        questions = readcsv(path / 'data/questions.csv', sep=';', key='url', update={'url': question_url})
        bot.pipe('questions').append(questions, progress='questions').dedup()

    with bot.pipe('questions'):
        with bot.pipe('question pages').download():
            bot.pipe('attachment preview links').select([
                'a.viewLink xpath:./b[text()="Rodyti kaip HTML"]/..', ('@href', row.key)
            ])
            bot.pipe('attachment links').select([
                '.info_table a.downloadLink', ('@href', {
                    'link-title': 'b:text',
                    'question-url': row.key,
                    'date': 'xpath:./ancestor::table//tr[contains(th/text(), "Posėdžio data")]/td/text()',
                    'status': 'xpath:./ancestor::table//tr[contains(th/text(), "Būsena")]/td/text()',
                })
            ])

    with bot.pipe('attachment preview links'):
        with bot.pipe('attachment preview').download(update={'source': row.value}):
            key = call(clean_redirect_url, 'xpath:/html/head/meta[@http-equiv="refresh"]/@content?')
            with bot.pipe('attachment preview links').select([(key, row.value['source'])]):
                bot.pipe('attachment preview').download(update={'source': row.value})

    with bot.pipe('attachment links'):
        bot.pipe('attachments').download(update={
            'question-url': row.value['question-url'],
            'date': row.value['date'],
            'status': row.value['status'],
        })

    bot.pipe('attachment preview').export('data/vilnius/vtaryba/attachment-previews.csv', include=['key', 'size', 'source'], update={
        'size': row.value['content'].length,
    })

    bot.pipe('attachments').export('data/vilnius/vtaryba/attachments.csv', update=attachment_export)

    bot.compact()
示例#6
0
def run(bot):

    path = pathlib.Path('data/vilnius/vtaryba-git')
    if gitsync('https://github.com/vilnius/taryba.git', path):
        questions = readcsv(path / 'data/questions.csv', sep=';', key='url', update={'url': question_url})
        bot.pipe('questions').append(questions, progress='questions').dedup()

    with bot.pipe('questions'):
        with bot.pipe('question pages').download():
            bot.pipe('attachment preview links').select([
                'a.viewLink xpath:./b[text()="Rodyti kaip HTML"]/..', ('@href', row.key)
            ])
            bot.pipe('attachment links').select([
                '.info_table a.downloadLink', ('@href', {
                    'link-title': 'b:text',
                    'question-url': row.key,
                    'date': 'xpath:./ancestor::table//tr[contains(th/text(), "Posėdžio data")]/td/text()',
                    'status': 'xpath:./ancestor::table//tr[contains(th/text(), "Būsena")]/td/text()',
                })
            ])

    with bot.pipe('attachment preview links'):
        with bot.pipe('attachment preview').download(update={'source': row.value}):
            key = call(clean_redirect_url, 'xpath:/html/head/meta[@http-equiv="refresh"]/@content?')
            with bot.pipe('attachment preview links').select([(key, row.value['source'])]):
                bot.pipe('attachment preview').download(update={'source': row.value})

    with bot.pipe('attachment links'):
        bot.pipe('attachments').download(update={
            'question-url': row.value['question-url'],
            'date': row.value['date'],
            'status': row.value['status'],
        })

    bot.pipe('attachment preview').export('data/vilnius/vtaryba/attachment-previews.csv', include=['key', 'size', 'source'], update={
        'size': row.value['content'].length,
    })

    bot.pipe('attachments').export('data/vilnius/vtaryba/attachments.csv', update=attachment_export)

    bot.compact()
示例#7
0
def run(bot):
    pages = bot.pipe('index pages')
    data = bot.pipe('data')

    # years = range(1812, 1921, 5)
    # pages.append(extract_archive_pages(years))

    with pages:
        data.clean().reset().select(
            '.inventoryLabel:text', {
                'fondas':
                '.upperHierarchyTreeInner xpath:a[1]/text()',
                'apyrašas':
                '.upperHierarchyTreeInner xpath:a[2]/text()',
                'data':
                call(dict, [
                    '.inventoryBaseDataTable tr',
                    (
                        'td[1]:content',
                        'td[2]:content',
                    )
                ]),
            })
def run(bot):

    if bot.run('2007'):
        start_url = 'http://www.vrk.lt/statiniai/puslapiai/2007_savivaldybiu_tarybu_rinkimai/lt/savivaldybes.html'
        with bot.pipe('savivaldybių rinkimai 2007').append(start_url).dedup():
            with bot.pipe('savivaldybių sąrašo puslapiai 2007').download():
                with bot.pipe('savivaldybių rezultatų nuorodos 2007').select(['table.partydata tr td b > a@href']).dedup():  # noqa
                    with bot.pipe('savivaldybių rezultatų puslapiai 2007').download():
                        bot.pipe('tarybos nariai').select(join(
                            [
                                'xpath://table[contains(@class,"partydata")][1]/tbody/tr[count(td)=3]', (
                                    'tr > td[2] > a@href', call(split_name, {
                                        'sąrašas': 'tr > td[1]:text',
                                        'pavardė vardas': 'tr > td[2] > a:text',
                                        'nuo': first('tr > td[3]:text', value('2007-03-04')),
                                        'iki': value('2011-02-26'),
                                        'mandato panaikinimo priežastis': value(None),
                                        'savivaldybė': call(fix_municipality_names, '/font[size="5"] > b:text'),
                                        'kadencija': value(2007),
                                    })
                                )
                            ],
                            [
                                'xpath://table[contains(@class,"partydata")][2]/tbody/tr[count(td)=5]', (
                                    'tr > td[2] > a@href', call(split_name, {
                                        'sąrašas': 'tr > td[1]:text',
                                        'pavardė vardas': 'tr > td[2] > a:text',
                                        'nuo': first('tr > td[3]:text', value('2007-03-04')),
                                        'iki': first('tr > td[4]:text', value('2011-02-26')),
                                        'mandato panaikinimo priežastis': 'tr > td[5]:text',
                                        'savivaldybė': call(fix_municipality_names, '/font[size="5"] > b:text'),
                                        'kadencija': value(2007),
                                    })
                                )
                            ],
                        ))

    if bot.run('2011'):
        start_url = 'http://www.2013.vrk.lt/2011_savivaldybiu_tarybu_rinkimai/output_lt/savivaldybiu_tarybu_sudetis/savivaldybes.html'  # noqa
        with bot.pipe('savivaldybių rinkimai 2011').append(start_url).dedup():
            with bot.pipe('savivaldybių sąrašo puslapiai 2011').download():
                with bot.pipe('savivaldybių rezultatų nuorodos 2011').select(['table.partydata tr td b > a@href']).dedup():  # noqa
                    with bot.pipe('savivaldybių rezultatų puslapiai 2011').download():
                        bot.pipe('tarybos nariai').select(join(
                            [
                                'xpath://table[contains(@class,"partydata")][1]/tr[count(td)=3]', (
                                    'tr > td[2] > a@href', call(split_name, {
                                        'sąrašas': 'tr > td[1]:text',
                                        'pavardė vardas': 'tr > td[2] > a:text',
                                        'nuo': first('tr > td[3]:text', value('2011-02-27')),
                                        'iki': value('2015-02-28'),
                                        'mandato panaikinimo priežastis': value(None),
                                        'savivaldybė': call(fix_municipality_names, '/font[size="5"] > b:text'),
                                        'kadencija': value(2011),
                                    })
                                )
                            ],
                            [
                                'xpath://table[contains(@class,"partydata")][2]/tr[count(td)=5]', (
                                    'tr > td[2] > a@href', call(split_name, {
                                        'sąrašas': 'tr > td[1]:text',
                                        'pavardė vardas': 'tr > td[2] > a:text',
                                        'nuo': first('tr > td[3]:text', value('2011-02-27')),
                                        'iki': first('tr > td[4]:text', value('2015-02-28')),
                                        'mandato panaikinimo priežastis': 'tr > td[5]:text',
                                        'savivaldybė': call(fix_municipality_names, '/font[size="5"] > b:text'),
                                        'kadencija': value(2011),
                                    })
                                )
                            ],
                        ))

    if bot.run('2015'):
        start_url = 'http://www.2013.vrk.lt/2015_savivaldybiu_tarybu_rinkimai/output_lt/savivaldybiu_tarybu_sudetis/savivaldybes.html'  # noqa
        with bot.pipe('savivaldybių rinkimai').append(start_url).dedup():
            with bot.pipe('savivaldybių sąrašo puslapiai').download():
                with bot.pipe('savivaldybių rezultatų nuorodos').select(['table.partydata tr td b > a@href']).dedup():
                    with bot.pipe('savivaldybių rezultatų puslapiai').download():
                        bot.pipe('tarybos nariai').select(join(
                            [
                                'xpath://table[contains(@class,"partydata3")][1]/tr[count(td)>0]', (
                                    'tr > td[2] > a@href', call(split_name, {
                                        'sąrašas': 'tr > td[1]:text',
                                        'pavardė vardas': 'tr > td[2] > a:text',
                                        'nuo': 'tr > td[3]:text',
                                        'iki': value('2019-03-01'),
                                        'mandato panaikinimo priežastis': value(None),
                                        'savivaldybė': '/font[size="5"] > b:text',
                                        'kadencija': value(2015),
                                    })
                                )
                            ],
                            [
                                'xpath://table[contains(@class,"partydata3")][2]/tr[count(td)>0]', (
                                    'tr > td[2] > a@href', call(split_name, {
                                        'sąrašas': 'tr > td[1]:text',
                                        'pavardė vardas': 'tr > td[2] > a:text',
                                        'nuo': 'tr > td[3]:text',
                                        'iki': 'tr > td[4]:text',
                                        'mandato panaikinimo priežastis': 'tr > td[5]:text',
                                        'savivaldybė': '/font[size="5"] > b:text',
                                        'kadencija': value(2015),
                                    })
                                )
                            ],
                        ))

    bot.compact()

    bot.pipe('tarybos nariai').export('data/vrk/savivaldybiu-tarybu-sudetis/tarybos-nariai.csv')
def run(bot):
    bot.download_delay = 7  # seconds, vtek.lt denies access if more frequent request are detected

    start_urls = [
        # Seimas (kodas: 188605295)
        'http://www.vtek.lt/paieska/id001/paieska.php?dekl_jkodas=188605295&dekl_vardas=&dekl_pavarde=&rasti=Surasti',
        # Europos parlamentas (kodas: 188648923)
        'http://www.vtek.lt/paieska/id001/paieska.php?dekl_jkodas=188648923&dekl_vardas=&dekl_pavarde=&rasti=Surasti',
    ]

    # Download all pagination pages, redownload after each 7 days
    with bot.pipe('sąrašas').clean(timedelta(days=7)).append(start_urls).dedup():
        with bot.pipe('puslapiai').download():
            with bot.pipe('sąrašas').select(['.panel-body > a@href']).dedup():
                with bot.pipe('puslapiai').download():
                    # We don't want to select page links from each page, they are the same on each page.
                    bot.pipe('sąrašas').skip()

    # Download declaraton pages and group by full name, since URL's are changing
    with bot.pipe('puslapiai'):
        with bot.pipe('seimo nariai').clean(timedelta(days=30)).select(call(select_by_code, [
            'xpath://div[contains(@class,"panel-body") and count(div)=3]', (
                'div[1] > a:text', {               # Person's full name
                    'link': 'div[1] > a@href',     # Link to declaration page
                    'code': strip('div[2]:text'),  # Position code in an institution where this person work
                    'institution': 'div[3]:text',  # Link to declaration page
                }
            )
        ])).dedup():
            bot.pipe('seimo narių deklaracijų puslapiai').download(
                row.value['download'], headers={'Referer': row.value['download']}
            )

    # Extract row data for members of parlament
    with bot.pipe('seimo narių deklaracijų puslapiai'):
        bot.pipe('seimo narių deklaracijos').select(
            nspace(lower('#asmens_duomenys xpath:./tr[contains(td/text(),"DEKLARUOJANTIS ASMUO")]/following-sibling::tr[1]/td/text()')), {  # noqa
                'vtek link': row.key,
                'deklaruojantis asmuo': '#asmens_duomenys xpath:./tr[contains(td/text(),"DEKLARUOJANTIS ASMUO")]/following-sibling::tr[1]/td/text()',  # noqa
                'darbovietė': '#asmens_duomenys xpath:./tr[contains(td/text(),"DARBOVIETĖ")][1]/following-sibling::tr[1]/td/text()',  # noqa
                'pareigos': '#asmens_duomenys xpath:./tr[contains(td/text(),"PAREIGOS")][1]/following-sibling::tr[1]/td/text()',  # noqa
                'sutuoktinis': '#asmens_duomenys xpath:./tr[contains(td/text(),"SUTUOKTINIS, SUGYVENTINIS, PARTNERIS")]/following-sibling::tr[2]/td/text()?',  # noqa
                'sutuoktinio darbovietė': '#asmens_duomenys xpath:./tr[contains(td/text(),"SUTUOKTINIO, SUGYVENTINIO, PARTNERIO DARBOVIETĖ")]/following-sibling::tr[1]/td/text()?',  # noqa
                'sutuoktinio pareigos': '#asmens_duomenys xpath:./tr[contains(td/text(),"PAREIGOS")][2]/following-sibling::tr[1]/td/text()?',  # noqa
                'deklaracijos': [
                    '#pagrindine_priedai #p_virsus', (
                        strip('tr[2] > td:text'), [
                            'xpath:./../../following-sibling::tr[1]/td/table[@id="priedas"]/tr/td/table/tr', (
                                first(strip('td[1]:text'), value(None)),   # Field name
                                first(strip('td[2]:text?'), value(None)),  # Field value
                            )
                        ]
                    )
                ]
            }
        )

    # Extract all kinds of declarations, export them to csv and upload to the server
    extract_args = [
        ('sandoriai', ('SANDORIAI', 'Sandorį sudaręs asmuo', {('Sandoris', None)})),
        ('juridiniai', ('RYŠIAI SU JURIDINIAIS ASMENIMIS', 'Asmuo, kurio ryšys nurodomas')),
        ('fiziniai', ('RYŠIAI SU FIZINIAIS ASMENIMIS', 'Asmuo, kurio ryšys nurodomas')),
        ('individuali veikla', ('INDIVIDUALI VEIKLA', 'Asmuo, kurio individuali veikla toliau bus nurodoma')),
        ('kita', ('KITI DUOMENYS, DĖL KURIŲ GALI KILTI INTERESŲ KONFLIKTAS', None)),
    ]
    for name, args in extract_args:
        csvpath = 'data/%s.csv' % name.replace(' ', '-')
        with bot.pipe('seimo narių deklaracijos'):
            if bot.pipe(name).is_filled():
                bot.pipe(name).clean().reset().call(extract(*args)).export(csvpath)
                subprocess.call(['scp', csvpath, 'atviriduomenys.lt:/opt/atviriduomenys.lt/app/var/www/data/vtek/seimas'])  # noqa

    bot.compact()
示例#10
0
 ]).dedup(),
 task('dokumentų-sąrašas', 'dokumentų-puslapiai').download(
     cookies=cookies,
     check=
     '#page-content div.default b xpath:a[text()="dokumento tekstas"]'),
 task('dokumentų-puslapiai', 'susijusių-dokumentų-sąrašas').select([
     '#page-content div.default b xpath:a[text()="susiję dokumentai"]/@href'
 ]).dedup(),
 task('susijusių-dokumentų-puslapiai').download(
     cookies=cookies,
     check=
     '#page-content div.default b xpath:a[text()="susiję dokumentai"]'),
 task('dokumentų-puslapiai', 'metadata').select(
     this.key,
     call(dict, [
         '.basic .ltb',
         (select(':text').strip(), select('b:text?').strip())
     ])).dedup(),
 task('dokumentų-puslapiai',
      'texts').select(this.key, 'body > div:content').dedup(),
 task('metadata').export('data/lrs/dokumentai/metadata.csv',
                         include=[
                             'key',
                             'Data:',
                             'Rūšis:',
                             'Kalba:',
                             'Numeris:',
                             'Statusas:',
                         ]),
 task('texts').export('data/lrs/dokumentai/texts.csv',
                      include=[
                          'key',