obshtestvo / sledi-parlamenta

Надежден инструмент за справки и анализ на парламентарната активност
http://parliament.obshtestvo.bg/
The Unlicense
13 stars 3 forks source link

Crawler на депутатските профили #8

Open antitoxic opened 11 years ago

antitoxic commented 11 years ago

Да се прегледа кода от другите 2 проекта

Това е от http://www.parlamentaren-kontrol.com/:

crawler: https://github.com/parlamentaren-kontrol/parlamentaren-kontrol/blob/master/craw_mps_data.py

Това предлага yurukov: http://parliament.yurukov.net/

crawler: https://github.com/yurukov/Bulgarian-Parliament-Open-Data/blob/master/app/mp.php

Да се напише crawler

Който може да върви всеки ден и да извлича само новото инфо. Може да се ползва като пример този от mp-votes: https://github.com/obshtestvo/rating-gov-representatives/tree/master/apps/mp-votes

antitoxic commented 11 years ago

Пример: http://www.parliament.bg/bg/MP/1510

И в XML формат: http://www.parliament.bg/export.php/bg/xml/MP/1510

Боян и Стефан, и двамата, казаха че има проблеми с XML-ите - невалидни са, кавички разни и тн. Мисля обаче че ако се зареди XML-a сякаш е html, и се обработи с cheerio няма да има проблем за деформациите. Поне се надвявам.

Секцията "Парламентарна дейност"

Къде е член, председател, зам. председател...

За да може, след първия crawl да се crawl-ват нови участия или премахнати участия, може би е добре да се запазва и URL-то на всяко от списъка, да служи като идентификатор, иначе разполагаме само с име на дейността.

Секцията "Внесени законопроекти"

Същото като горе, за да може, след първия crawl да се crawl-ват нови участия или премахнати участия, може би е добре да се запазва и URL-то на всяко от списъка, да служи като идентификатор, иначе разполагаме само с име на законопроекта.

Секция "Парламентарен контрол"

Рядко има нещо, а като има е просто текст.

Менюто

menu

Досега не съм намерил да има информация по някоя от секциите на менюто. Май не е използвано. @Krastanov някаква идея?

Krastanov commented 11 years ago

Може да си въобразявам, но мисля че менюто е скорошна добавка.

Относно xml файловете, мисля че си заслужава първо да се провери дали CSV файловете не са по-добри. От малкото което съм тествал, те винаги са били коректни за разлика от xml-а. Относно аргументи като "xml е по-добре структуриран от csv", в случая схемата използвана за xml-а не е особено добра и не носи предимства.

antitoxic commented 11 years ago

Примерно CSV: http://www.parliament.bg/export.php/bg/csv/MP/1519

Не съдържа линковете към "Парламентарна дейност", тоест няма как да имаме идентификатор без да използваме името на дейността, която обаче може може да различно вписана или с грешки.

Затова клоня към scrape на html или xml.

Krastanov commented 11 years ago

Ясно, xml е единствения вариант тогава. От каквото съм тествал единствените грешки във формата са unescaped quotes. Това би трябвало да е лесно поправимо с филтър от типа " not between < and > => \". За жалост това не е в рамките на нещата които могат да се направят с regex (заради проверката за отворени скоби), но така или иначе е не повече от 3-4 реда код.

Krastanov commented 11 years ago

Пример: http://www.parliament.bg/export.php/bg/xml/MP/835, търсете string "Белене"

Krastanov commented 11 years ago

Следния код би трябвало да е достатъчен за да поправи xml файловете ако проблема е само в кавичките:

xmlstr = open('test.xml', 'r').read()
cleanedxml = ''
start = 0
while True:
    opening = xmlstr.find('="', start)
    if opening == -1:
        break
    next_opening = xmlstr.find('="', opening+2)
    next_tagend  = xmlstr.find('>',  opening+2)
    last_quote = xmlstr.rfind('"', opening+2, min(next_tagend, next_opening))
    cleanedxml += (xmlstr[start     :opening+2   ] +
                   xmlstr[opening+2 :last_quote  ].replace('"', '&quot;') +
                   xmlstr[last_quote:next_opening])
    start = next_opening
print cleanedxml
Krastanov commented 11 years ago

Това е списъка със всички проблемни xml файлове от предишното правителство:

835
844
846
872
879
884
886
899
900
904
908
911
932
948
970
983
988
1005
1007
1019
1025
1031
1038
1044
1048
1059
1065
1069
1114
1121
1130
Krastanov commented 11 years ago

Тествах кода за поправяне на кавичките на всички повредени xml файлове от предишното правителство, работи. Може да пропускам нещо, но за сега мисля че този проблем е решен.

Krastanov commented 11 years ago

Само да уточня, проблемът беше следния <TAG value="и тук между отварящата и затварящата кавичка постявяме " вместо да поставим &quot;">

tsikov commented 10 years ago

Здравейте. Имате ли нещо против, аз да поема това ишу, защото вече написах един crawler, който взема най-основната информация за да си напълня базата с нещо, с което да работя по UI-я, но се привързах към него и сега искам да го развия изцяло =) Разбира се, ако някой вече е много напреднал, ще го оставя да си доработи. =) Виждам, че @vbachev е assign-нат?