Open antitoxic opened 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-то на всяко от списъка, да служи като идентификатор, иначе разполагаме само с име на законопроекта.
Рядко има нещо, а като има е просто текст.
Досега не съм намерил да има информация по някоя от секциите на менюто. Май не е използвано. @Krastanov някаква идея?
Може да си въобразявам, но мисля че менюто е скорошна добавка.
Относно xml файловете, мисля че си заслужава първо да се провери дали CSV файловете не са по-добри. От малкото което съм тествал, те винаги са били коректни за разлика от xml-а. Относно аргументи като "xml е по-добре структуриран от csv", в случая схемата използвана за xml-а не е особено добра и не носи предимства.
Примерно CSV: http://www.parliament.bg/export.php/bg/csv/MP/1519
Не съдържа линковете към "Парламентарна дейност", тоест няма как да имаме идентификатор без да използваме името на дейността, която обаче може може да различно вписана или с грешки.
Затова клоня към scrape на html или xml.
Ясно, xml е единствения вариант тогава. От каквото съм тествал единствените грешки във формата са unescaped quotes. Това би трябвало да е лесно поправимо с филтър от типа " not between < and > => \"
. За жалост това не е в рамките на нещата които могат да се направят с regex (заради проверката за отворени скоби), но така или иначе е не повече от 3-4 реда код.
Пример: http://www.parliament.bg/export.php/bg/xml/MP/835, търсете string "Белене"
Следния код би трябвало да е достатъчен за да поправи 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('"', '"') +
xmlstr[last_quote:next_opening])
start = next_opening
print cleanedxml
Това е списъка със всички проблемни 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
Тествах кода за поправяне на кавичките на всички повредени xml файлове от предишното правителство, работи. Може да пропускам нещо, но за сега мисля че този проблем е решен.
Само да уточня, проблемът беше следния <TAG value="и тук между отварящата и затварящата кавичка постявяме " вместо да поставим "">
Здравейте. Имате ли нещо против, аз да поема това ишу, защото вече написах един crawler, който взема най-основната информация за да си напълня базата с нещо, с което да работя по UI-я, но се привързах към него и сега искам да го развия изцяло =) Разбира се, ако някой вече е много напреднал, ще го оставя да си доработи. =) Виждам, че @vbachev е assign-нат?
Да се прегледа кода от другите 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