Сразу прошу прощения за сумбурность. Просто кое-где шило закололо, захотелось данных по участкам (в нормальном виде).
Думаю, ни для кого не секрет, что сейчас у нас (на Украине) идут выборы (точнее, подсчет результатов); идут туго. Лень ждать окончательного результата, потому решил заняться этим сейчас. С сайта центризбиркома простым php-скриптом данные льются в БД, откуда их можно вытащить и делать все, что захочется.
Тут данные (экспортированные в SQL через PMA)
Тут шаблон для БД (если вы будете сами сливать).
Код скрипта:
Простите быдлокодера
#!/usr/bin/php <?php $num = 225; $url = 'http://www.cvk.gov.ua/vnd2012/wp336pt001f01=900pf7331=%s.html'; $doc = new \DOMDocument; $pdo = new PDO('mysql:host=localhost;dbname=vybory', 'vybory', 'vybory'); for ($i = 1; $i <= $num; $i++) { echo 'Округ ' . $i . "\n"; $page = sprintf($url, $i); $code = file_get_contents($page); $doc->loadHTML($code); $xpath = new \DOMXpath($doc); $table = $xpath->query('//div[@id="restab"]/table')->item(0); foreach ($table->childNodes as $node) { $id = trim($node->childNodes->item(0)->nodeValue); if (!is_numeric($id)) { continue; } $perc = trim($node->childNodes->item(2)->nodeValue) / trim($node->childNodes->item(1)->nodeValue); $pdo->exec('insert into uchastok (perc, num, okrug) values ("' . $perc . '", "' . $id . '", "' . $i . '")'); $id = $pdo->lastInsertId(); $pdo->beginTransaction(); for ($j = 3; $j < $node->childNodes->length; $j++) { $c = $node->childNodes->item($j)->nodeValue; $c = (int)trim($c); $pdo->exec('insert into data (id_uchastok, id_party, data) values ("' . $id . '", "' . ($j - 2) . '", "' . $c . '")'); } $pdo->commit(); } } echo "\n"; exit(0);
Да, код стрёмный. Да, таблицы вроде «uchastok» режут глаза. Просто хотелось начать, а там, может, кто-нибудь по-нормальному оформит. Само-собой, любые дополнения приветствуются.
ссылка на оригинал статьи http://habrahabr.ru/post/157185/
Добавить комментарий