aidiss / opendatagovlt

For open data in Lithuania
2 stars 1 forks source link

Roboto instrukcijų failas #16

Open sirex opened 9 years ago

sirex commented 9 years ago

Duomenų šaltinių, iš kurių duomenis gali surinkti duomenų robotai, yra be galo daug. Tam tikros grupės duomenų šaltinių duomenis pateikia panašiu pavidalu, todėl vietoj to, kad kiekvienam duomenų šaltiniui būtų kuriamas naujas robotas, programuojant jį Python kalba, galima susikurti DSL (Domain-specific language).

Deklaratyvus DSL padeda žymiai paprasčiau spręsti konkrečias problemas. Todėl turinti DSL skirtą roboto instrukcijų aprašymui, duomenis iš naujų šaltinių surinkti bus žymiai paprasčiau.

Štai pavyzdys, kaip galėtų atrodyti robotų instrukcijų failas YAML formatu:

name: opendata.gov.lt
crowler:
  start-urls:
    - http://opendata.gov.lt/index.php?vars=/public/public/search
  download-urls:
    - name: table
      pattern: http://opendata\.gov\.lt/index\.php\?vars=/public/public/search/\d+/
      actions: [follow, download]
    - name: details
      pattern: http://opendata\.gov\.lt/index.php\?vars=/public/public/print/\d+/
      actions: [download]
scraper:
  - name: dataset
    source: details
    parser: html-table-fields
    xpath: /html/body/table
    primary-key: [code]
    fields:
      - name: code
        type: integer
        match: Kodas

Pagal šitą aprašą bus sukurtos trys duomenų saugyklos, iš kurių table ir details saugos atsiųstus puslapius, o dataset saugos struktūruotus duomenis išrinktus iš details duomenų.

Žodžiu, taip gan paprastai galima aprašyti instrukcijas robotui, imti duomenis iš tam tikro šaltinio ir išgauti iš to šaltinio normalizuotus ir struktūruotus duomenis.

aidiss commented 9 years ago

Supratau, manau galime pradėti kelti YAML'us į kodą. Tavo pateiktas pavyzdys jau tinkamas. Ar yra priežasčių, dėl kurių nereikėtų skubėti?

sirex commented 9 years ago

Nematau jokių priežasčių dėl kurių nereikėtų skubėti. YAML failai tiesiog padeda aprašyti duomenis tokiu būdu, kuriuos vėliau naudosime tų aprašytų duomenų surinkimui. Todėl tie YAML failas tiesiog padės geriau suprasti iš ko sudaryti įvairūs duomenų šaltiniai ir ta surinkta informacija bus labai naudinga kuriant patį robotą, kuris interpretuos YAML failus.