Código de captação de dados do site da Câmara Legislativa Federal


In [1]:
import urllib2
#from xml.etree import ElementTree as ET
from lxml import etree as ET #Supports xpath syntax
import xml.etree.ElementTree as ETree
import xml.dom.minidom
from BeautifulSoup import BeautifulSoup
import os
import sys
from collections import defaultdict
from pprint import pprint

Primeiramente prescisamos definir os tipos de proposição existentes na Câmara dos Deputados, para isso a Câmara disponibiliza um XML com tal informação.

http://www2.camara.leg.br/transparencia/dados-abertos/dados-abertos-legislativo/webservices/proposicoes-1/listarsiglastipoproposicao


In [2]:
xml_page = urllib2.urlopen('http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarSiglasTipoProposicao')
str_page = xml_page.read()
root_listagem = ETree.fromstring(str_page)

In [3]:
print str_page


<?xml version="1.0" encoding="utf-8"?>
<siglas>
  <sigla tipoSigla="AA        " descricao="Autógrafo" ativa="True" genero="o" />
  <sigla tipoSigla="ADD       " descricao="Adendo" ativa="True" genero="o" />
  <sigla tipoSigla="ANEXO     " descricao="Anexo" ativa="True" genero="o" />
  <sigla tipoSigla="APJ       " descricao="Anteprojeto" ativa="True" genero="o" />
  <sigla tipoSigla="ATC       " descricao="Ato Convocatório" ativa="True" genero="o" />
  <sigla tipoSigla="ATOP      " descricao="Ato do Presidente" ativa="False" genero="o" />
  <sigla tipoSigla="AV        " descricao="Aviso" ativa="True" genero="o" />
  <sigla tipoSigla="AVN       " descricao="Aviso (CN)" ativa="True" genero="o" />
  <sigla tipoSigla="CAC       " descricao="Comunicado de alteração do controle societário" ativa="True" genero="o" />
  <sigla tipoSigla="CAE       " descricao="Relatório de Atividades do Comitê de Admissibilidade de Emendas (CAE)" ativa="True" genero="o" />
  <sigla tipoSigla="CAE       " descricao="Relatório" ativa="True" genero="o" />
  <sigla tipoSigla="CCN       " descricao="Consulta do Congresso Nacional" ativa="True" genero="a" />
  <sigla tipoSigla="COI       " descricao="Relatório do COI" ativa="True" genero="o" />
  <sigla tipoSigla="CON       " descricao="Consulta" ativa="True" genero="a" />
  <sigla tipoSigla="CST       " descricao="CST" ativa="False" genero="o" />
  <sigla tipoSigla="CVO       " descricao="Complementação de Voto" ativa="True" genero="a" />
  <sigla tipoSigla="CVR       " descricao="Contestação ao Voto do Relator" ativa="True" genero="a" />
  <sigla tipoSigla="DCR       " descricao="Denúncia por crime de responsabilidade" ativa="True" genero="a" />
  <sigla tipoSigla="DEC       " descricao="Decisão" ativa="True" genero="a" />
  <sigla tipoSigla="DEN       " descricao="Denúncia" ativa="True" genero="a" />
  <sigla tipoSigla="DIS       " descricao="Discurso" ativa="True" genero="o" />
  <sigla tipoSigla="DOC       " descricao="Documentos internos" ativa="True" genero="o" />
  <sigla tipoSigla="DTQ       " descricao="Destaque" ativa="True" genero="o" />
  <sigla tipoSigla="DVT       " descricao="Declaração de Voto" ativa="True" genero="a" />
  <sigla tipoSigla="EAG       " descricao="Emenda Substitutiva Aglutinativa Global" ativa="True" genero="a" />
  <sigla tipoSigla="EMA       " descricao="Emenda Aglutinativa de Plenário" ativa="True" genero="a" />
  <sigla tipoSigla="EMC       " descricao="Emenda na Comissão" ativa="True" genero="a" />
  <sigla tipoSigla="EMC-A     " descricao="Emenda Adotada pela Comissão" ativa="True" genero="a" />
  <sigla tipoSigla="EMD       " descricao="Emenda" ativa="True" genero="a" />
  <sigla tipoSigla="EML       " descricao="Emenda à LDO" ativa="True" genero="a" />
  <sigla tipoSigla="EMO       " descricao="Emenda ao Orçamento" ativa="True" genero="a" />
  <sigla tipoSigla="EMP       " descricao="Emenda de Plenário" ativa="True" genero="a" />
  <sigla tipoSigla="EMPV      " descricao="Emenda a Medida Provisória" ativa="True" genero="a" />
  <sigla tipoSigla="EMR       " descricao="Emenda de Relator" ativa="True" genero="a" />
  <sigla tipoSigla="EMRP      " descricao="Emenda de Relator Parcial" ativa="True" genero="a" />
  <sigla tipoSigla="EMS       " descricao="Emenda/Substitutivo do Senado" ativa="True" genero="a" />
  <sigla tipoSigla="EPP       " descricao="Emenda ao Plano Plurianual" ativa="True" genero="a" />
  <sigla tipoSigla="ERD       " descricao="Emenda de Redação" ativa="True" genero="a" />
  <sigla tipoSigla="ERD-A     " descricao="Emenda de Redação Adotada" ativa="True" genero="a" />
  <sigla tipoSigla="ERR       " descricao="Errata" ativa="True" genero="a" />
  <sigla tipoSigla="ESB       " descricao="Emenda ao Substitutivo" ativa="True" genero="a" />
  <sigla tipoSigla="ESP       " descricao="Emenda Substitutiva de Plenário" ativa="True" genero="a" />
  <sigla tipoSigla="EXP       " descricao="Exposição" ativa="False" genero="o" />
  <sigla tipoSigla="IAN       " descricao="IAN" ativa="False" genero="o" />
  <sigla tipoSigla="INA       " descricao="Indicação de Autoridade" ativa="True" genero="a" />
  <sigla tipoSigla="INC       " descricao="Indicação" ativa="True" genero="a" />
  <sigla tipoSigla="MAN       " descricao="Manifestação do Relator" ativa="True" genero="a" />
  <sigla tipoSigla="MCN       " descricao="Mensagem (CN)" ativa="True" genero="o" />
  <sigla tipoSigla="MMP       " descricao="Mensagem do Ministério Público da União." ativa="True" genero="a" />
  <sigla tipoSigla="MPV       " descricao="Medida Provisória" ativa="True" genero="a" />
  <sigla tipoSigla="MSC       " descricao="Mensagem" ativa="True" genero="a" />
  <sigla tipoSigla="MSF       " descricao="Mensagem (SF)" ativa="True" genero="a" />
  <sigla tipoSigla="MSG       " descricao="Mensagem (CN)" ativa="True" genero="a" />
  <sigla tipoSigla="MST       " descricao="Mensagem do Supremo Tribunal Federal" ativa="True" genero="a" />
  <sigla tipoSigla="MTC       " descricao="Mensagem do Tribunal de Contas da União" ativa="True" genero="a" />
  <sigla tipoSigla="NIC       " descricao="Norma Interna" ativa="True" genero="a" />
  <sigla tipoSigla="NINF      " descricao="Não Informada" ativa="False" genero="o" />
  <sigla tipoSigla="OBJ       " descricao="Objeto de Deliberação" ativa="True" genero="a" />
  <sigla tipoSigla="OF        " descricao="Ofício" ativa="True" genero="o" />
  <sigla tipoSigla="OF        " descricao="Ofício do Congresso Nacional" ativa="True" genero="o" />
  <sigla tipoSigla="OF.       " descricao="Ofício Externo" ativa="True" genero="o" />
  <sigla tipoSigla="OFN       " descricao="Ofício (CN)" ativa="True" genero="o" />
  <sigla tipoSigla="OFS       " descricao="Ofício do Senado Federal" ativa="True" genero="o" />
  <sigla tipoSigla="OFT       " descricao="OFT" ativa="False" genero="o" />
  <sigla tipoSigla="P.C       " descricao="Parecer (CD)" ativa="True" genero="o" />
  <sigla tipoSigla="PAR       " descricao="Parecer de Comissão" ativa="True" genero="o" />
  <sigla tipoSigla="PARF      " descricao="Parecer de Comissão para Redação Final" ativa="True" genero="o" />
  <sigla tipoSigla="PCA       " descricao="PCA" ativa="False" genero="o" />
  <sigla tipoSigla="PDA       " descricao="PDA" ativa="False" genero="o" />
  <sigla tipoSigla="PDC       " descricao="Projeto de Decreto Legislativo" ativa="True" genero="o" />
  <sigla tipoSigla="PDN       " descricao="Projeto de Decreto Legislativo (CN)" ativa="True" genero="o" />
  <sigla tipoSigla="PDS       " descricao="Projeto de Decreto Legislativo (SF)" ativa="True" genero="o" />
  <sigla tipoSigla="PEA       " descricao="Parecer à Emenda Aglutinativa" ativa="True" genero="o" />
  <sigla tipoSigla="PEC       " descricao="Proposta de Emenda à Constituição" ativa="True" genero="a" />
  <sigla tipoSigla="PEP       " descricao="Parecer às Emendas de Plenario" ativa="True" genero="o" />
  <sigla tipoSigla="PES       " descricao="Parecer às emendas apresentadas ao Substitutivo do Relator" ativa="True" genero="o" />
  <sigla tipoSigla="PET       " descricao="Petição" ativa="True" genero="a" />
  <sigla tipoSigla="PFC       " descricao="Proposta de Fiscalização e Controle" ativa="True" genero="a" />
  <sigla tipoSigla="PIN       " descricao="Proposta de Instrução Normativa" ativa="True" genero="a" />
  <sigla tipoSigla="PL        " descricao="Projeto de Lei" ativa="True" genero="o" />
  <sigla tipoSigla="PLC       " descricao="Projeto de Lei da Câmara dos Deputados (SF)" ativa="True" genero="o" />
  <sigla tipoSigla="PLN       " descricao="Projeto de Lei (CN)" ativa="True" genero="o" />
  <sigla tipoSigla="PLP       " descricao="Projeto de Lei Complementar" ativa="True" genero="o" />
  <sigla tipoSigla="PLS       " descricao="Projeto de Lei do Senado Federal" ativa="True" genero="o" />
  <sigla tipoSigla="PLV       " descricao="Projeto de Lei de Conversão" ativa="True" genero="o" />
  <sigla tipoSigla="PPP       " descricao="Parecer Proferido em Plenário" ativa="True" genero="o" />
  <sigla tipoSigla="PPP       " descricao="Parecer Proferido em Plenário - Notas Taquigráficas" ativa="True" genero="o" />
  <sigla tipoSigla="PPR       " descricao="Parecer Reformulado de Plenário" ativa="True" genero="o" />
  <sigla tipoSigla="PRA       " descricao="Projeto de Resolução - Assembleia Constituinte" ativa="False" genero="o" />
  <sigla tipoSigla="PRC       " descricao="Projeto de Resolução" ativa="True" genero="o" />
  <sigla tipoSigla="PRF       " descricao="Projeto de Resolução do Senado Federal" ativa="True" genero="o" />
  <sigla tipoSigla="PRL       " descricao="Parecer do Relator" ativa="True" genero="o" />
  <sigla tipoSigla="PRN       " descricao="Projeto de Resolução do Congresso Nacional" ativa="True" genero="o" />
  <sigla tipoSigla="PRO       " descricao="Proposta" ativa="True" genero="a" />
  <sigla tipoSigla="PRP       " descricao="Parecer do Relator Parcial" ativa="True" genero="o" />
  <sigla tipoSigla="PRR       " descricao="Parecer Reformulado" ativa="True" genero="o" />
  <sigla tipoSigla="PRST      " descricao="Parecer à Redação para o Segundo Turno" ativa="True" genero="o" />
  <sigla tipoSigla="PRT       " descricao="Parecer Técnico" ativa="True" genero="o" />
  <sigla tipoSigla="PRV       " descricao="Parecer Vencedor" ativa="True" genero="o" />
  <sigla tipoSigla="PRVP      " descricao="Proposta de Redação do Vencido em Primeiro Turno" ativa="True" genero="o" />
  <sigla tipoSigla="PSS       " descricao="Parecer às Emendas ou ao Substitutivo do Senado - Notas Taquigráficas" ativa="True" genero="o" />
  <sigla tipoSigla="PSS       " descricao="Parecer às Emendas ou ao Substitutivo do Senado" ativa="True" genero="o" />
  <sigla tipoSigla="R.C       " descricao="Recurso do Congresso Nacional" ativa="True" genero="o" />
  <sigla tipoSigla="RAT       " descricao="Relatório Setorial" ativa="True" genero="o" />
  <sigla tipoSigla="RCM       " descricao="RCM" ativa="False" genero="o" />
  <sigla tipoSigla="RCP       " descricao="Requerimento de Instituição de CPI" ativa="True" genero="o" />
  <sigla tipoSigla="RDF       " descricao="Redação Final" ativa="True" genero="a" />
  <sigla tipoSigla="RDV       " descricao="Redação do Vencido" ativa="True" genero="a" />
  <sigla tipoSigla="REC       " descricao="Recurso" ativa="True" genero="o" />
  <sigla tipoSigla="REL       " descricao="Relatório" ativa="True" genero="a" />
  <sigla tipoSigla="REM       " descricao="Reclamação" ativa="True" genero="a" />
  <sigla tipoSigla="REP       " descricao="Representação" ativa="True" genero="a" />
  <sigla tipoSigla="REQ       " descricao="Requerimento" ativa="True" genero="o" />
  <sigla tipoSigla="RFP       " descricao="Refomulação de Parecer - art. 130, parágrafo único do RICD." ativa="False" genero="a" />
  <sigla tipoSigla="RIC       " descricao="Requerimento de Informação" ativa="True" genero="o" />
  <sigla tipoSigla="RIN       " descricao="Requerimento de Resolução Interna" ativa="True" genero="a" />
  <sigla tipoSigla="RLF       " descricao="Relatório Final" ativa="True" genero="o" />
  <sigla tipoSigla="RLP       " descricao="Relatório Prévio" ativa="True" genero="o" />
  <sigla tipoSigla="RLP(R)    " descricao="Relatório Prévio Reformulado" ativa="True" genero="o" />
  <sigla tipoSigla="RLP(V)    " descricao="Relatório Prévio Vencedor" ativa="True" genero="o" />
  <sigla tipoSigla="RPA       " descricao="Relatório Parcial" ativa="True" genero="o" />
  <sigla tipoSigla="RPL       " descricao="Relatório Preliminar" ativa="True" genero="o" />
  <sigla tipoSigla="RPLE      " descricao="Relatório Preliminar Apresentado com Emendas" ativa="True" genero="o" />
  <sigla tipoSigla="RPLOA     " descricao="Relatório Preliminar" ativa="True" genero="o" />
  <sigla tipoSigla="RPR       " descricao="Representação" ativa="False" genero="a" />
  <sigla tipoSigla="RQA       " descricao="RQA" ativa="False" genero="o" />
  <sigla tipoSigla="RQC       " descricao="RQC" ativa="False" genero="o" />
  <sigla tipoSigla="RQN       " descricao="Requerimento do Congresso Nacional" ativa="True" genero="o" />
  <sigla tipoSigla="RQP       " descricao="Requerimento de Plenário" ativa="True" genero="o" />
  <sigla tipoSigla="RRC       " descricao="Relatório de Receita" ativa="True" genero="o" />
  <sigla tipoSigla="RRL       " descricao="Relatório do Relator" ativa="True" genero="o" />
  <sigla tipoSigla="RST       " descricao="Redação para o segundo turno" ativa="True" genero="a" />
  <sigla tipoSigla="RTV       " descricao="Mensagem de Rádio e Televisão" ativa="False" genero="a" />
  <sigla tipoSigla="SAP       " descricao="Subemenda Aglutinativa Substitutiva de Plenário" ativa="False" genero="a" />
  <sigla tipoSigla="SBE       " descricao="Subemenda" ativa="True" genero="a" />
  <sigla tipoSigla="SBE-A     " descricao="Subemenda Adotada pela Comissão" ativa="True" genero="a" />
  <sigla tipoSigla="SBR       " descricao="Subemenda de Relator" ativa="True" genero="a" />
  <sigla tipoSigla="SBT       " descricao="Substitutivo" ativa="True" genero="o" />
  <sigla tipoSigla="SBT-A     " descricao="Substitutivo adotado pela Comissão" ativa="True" genero="o" />
  <sigla tipoSigla="SDL       " descricao="Sugestão de Emenda à LDO - CLP" ativa="True" genero="a" />
  <sigla tipoSigla="SGM       " descricao="Ofício da Mesa" ativa="False" genero="o" />
  <sigla tipoSigla="SIT       " descricao="Solicitação de Informação ao TCU" ativa="True" genero="a" />
  <sigla tipoSigla="SLD       " descricao="Sugestão de Emenda à LDO - Comissões" ativa="True" genero="a" />
  <sigla tipoSigla="SOA       " descricao="Sugestão de Emenda ao Orçamento - CLP" ativa="True" genero="a" />
  <sigla tipoSigla="SOR       " descricao="Sugestão de Emenda ao Orçamento - Comissões" ativa="True" genero="a" />
  <sigla tipoSigla="SPA       " descricao="Sugestão de Emenda ao PPA - CLP" ativa="True" genero="a" />
  <sigla tipoSigla="SPA-R     " descricao="Sugestão de Emenda ao PPA - revisão (CLP)" ativa="True" genero="a" />
  <sigla tipoSigla="SPP       " descricao="Sugestão de Emenda ao PPA - Comissões" ativa="True" genero="a" />
  <sigla tipoSigla="SPP-R     " descricao="Sugestão de Emenda ao PPA - revisão (Comissões)" ativa="True" genero="o" />
  <sigla tipoSigla="SRAP      " descricao="Sugestão de Requerimento de Audiência Pública" ativa="False" genero="o" />
  <sigla tipoSigla="SRL       " descricao="Sugestão de Emenda a Relatório" ativa="True" genero="a" />
  <sigla tipoSigla="SSP       " descricao="Subemenda Substitutiva de Plenário" ativa="True" genero="a" />
  <sigla tipoSigla="STF       " descricao="Ofício" ativa="False" genero="o" />
  <sigla tipoSigla="SUC       " descricao="Sugestão a Projeto de Consolidação de Leis" ativa="True" genero="a" />
  <sigla tipoSigla="SUG       " descricao="Sugestão" ativa="True" genero="a" />
  <sigla tipoSigla="SUM       " descricao="Súmula" ativa="True" genero="a" />
  <sigla tipoSigla="TER       " descricao="Termo de Implementação" ativa="True" genero="o" />
  <sigla tipoSigla="TVR       " descricao="Ato de Concessão e Renovação de Concessão de Emissora de Rádio e Televisão" ativa="True" genero="a" />
  <sigla tipoSigla="VTS       " descricao="Voto em Separado" ativa="True" genero="o" />
</siglas>

Como podemos ver na visualização do XML acima, o arquivo possui um elemento definido como "sigla" e este elemento possui informações da respectiva sigla, estas informações são dadas a partir de 'keys' arguments, sendo estes:

tipoSigla = apreviação da sigla descricao = descrição da sigla ativa = indica se a sigla está ou não em uso (TRUE or FALSE) genero = Indicador do gênero da sigla da proposição (espécie da proposição)

Agora será montado um dicionário com tais informações


In [4]:
chaves = root_listagem[0].keys()
dicionario_siglas = {'tipoSigla':[],'ativa':[],'genero':[],'descricao':[]}
for i in range(len(root_listagem)):
    for k in chaves:
        dicionario_siglas[k].append(root_listagem[i].get(k).strip())

In [5]:
dicionario_siglas


Out[5]:
{'ativa': ['True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'False',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'False',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True',
  'False',
  'True',
  'True',
  'False',
  'True',
  'True',
  'True',
  'True',
  'True',
  'True'],
 'descricao': [u'Aut\xf3grafo',
  'Adendo',
  'Anexo',
  'Anteprojeto',
  u'Ato Convocat\xf3rio',
  'Ato do Presidente',
  'Aviso',
  'Aviso (CN)',
  u'Comunicado de altera\xe7\xe3o do controle societ\xe1rio',
  u'Relat\xf3rio de Atividades do Comit\xea de Admissibilidade de Emendas (CAE)',
  u'Relat\xf3rio',
  'Consulta do Congresso Nacional',
  u'Relat\xf3rio do COI',
  'Consulta',
  'CST',
  u'Complementa\xe7\xe3o de Voto',
  u'Contesta\xe7\xe3o ao Voto do Relator',
  u'Den\xfancia por crime de responsabilidade',
  u'Decis\xe3o',
  u'Den\xfancia',
  'Discurso',
  'Documentos internos',
  'Destaque',
  u'Declara\xe7\xe3o de Voto',
  'Emenda Substitutiva Aglutinativa Global',
  u'Emenda Aglutinativa de Plen\xe1rio',
  u'Emenda na Comiss\xe3o',
  u'Emenda Adotada pela Comiss\xe3o',
  'Emenda',
  u'Emenda \xe0 LDO',
  u'Emenda ao Or\xe7amento',
  u'Emenda de Plen\xe1rio',
  u'Emenda a Medida Provis\xf3ria',
  'Emenda de Relator',
  'Emenda de Relator Parcial',
  'Emenda/Substitutivo do Senado',
  'Emenda ao Plano Plurianual',
  u'Emenda de Reda\xe7\xe3o',
  u'Emenda de Reda\xe7\xe3o Adotada',
  'Errata',
  'Emenda ao Substitutivo',
  u'Emenda Substitutiva de Plen\xe1rio',
  u'Exposi\xe7\xe3o',
  'IAN',
  u'Indica\xe7\xe3o de Autoridade',
  u'Indica\xe7\xe3o',
  u'Manifesta\xe7\xe3o do Relator',
  'Mensagem (CN)',
  u'Mensagem do Minist\xe9rio P\xfablico da Uni\xe3o.',
  u'Medida Provis\xf3ria',
  'Mensagem',
  'Mensagem (SF)',
  'Mensagem (CN)',
  'Mensagem do Supremo Tribunal Federal',
  u'Mensagem do Tribunal de Contas da Uni\xe3o',
  'Norma Interna',
  u'N\xe3o Informada',
  u'Objeto de Delibera\xe7\xe3o',
  u'Of\xedcio',
  u'Of\xedcio do Congresso Nacional',
  u'Of\xedcio Externo',
  u'Of\xedcio (CN)',
  u'Of\xedcio do Senado Federal',
  'OFT',
  'Parecer (CD)',
  u'Parecer de Comiss\xe3o',
  u'Parecer de Comiss\xe3o para Reda\xe7\xe3o Final',
  'PCA',
  'PDA',
  'Projeto de Decreto Legislativo',
  'Projeto de Decreto Legislativo (CN)',
  'Projeto de Decreto Legislativo (SF)',
  u'Parecer \xe0 Emenda Aglutinativa',
  u'Proposta de Emenda \xe0 Constitui\xe7\xe3o',
  u'Parecer \xe0s Emendas de Plenario',
  u'Parecer \xe0s emendas apresentadas ao Substitutivo do Relator',
  u'Peti\xe7\xe3o',
  u'Proposta de Fiscaliza\xe7\xe3o e Controle',
  u'Proposta de Instru\xe7\xe3o Normativa',
  'Projeto de Lei',
  u'Projeto de Lei da C\xe2mara dos Deputados (SF)',
  'Projeto de Lei (CN)',
  'Projeto de Lei Complementar',
  'Projeto de Lei do Senado Federal',
  u'Projeto de Lei de Convers\xe3o',
  u'Parecer Proferido em Plen\xe1rio',
  u'Parecer Proferido em Plen\xe1rio - Notas Taquigr\xe1ficas',
  u'Parecer Reformulado de Plen\xe1rio',
  u'Projeto de Resolu\xe7\xe3o - Assembleia Constituinte',
  u'Projeto de Resolu\xe7\xe3o',
  u'Projeto de Resolu\xe7\xe3o do Senado Federal',
  'Parecer do Relator',
  u'Projeto de Resolu\xe7\xe3o do Congresso Nacional',
  'Proposta',
  'Parecer do Relator Parcial',
  'Parecer Reformulado',
  u'Parecer \xe0 Reda\xe7\xe3o para o Segundo Turno',
  u'Parecer T\xe9cnico',
  'Parecer Vencedor',
  u'Proposta de Reda\xe7\xe3o do Vencido em Primeiro Turno',
  u'Parecer \xe0s Emendas ou ao Substitutivo do Senado - Notas Taquigr\xe1ficas',
  u'Parecer \xe0s Emendas ou ao Substitutivo do Senado',
  'Recurso do Congresso Nacional',
  u'Relat\xf3rio Setorial',
  'RCM',
  u'Requerimento de Institui\xe7\xe3o de CPI',
  u'Reda\xe7\xe3o Final',
  u'Reda\xe7\xe3o do Vencido',
  'Recurso',
  u'Relat\xf3rio',
  u'Reclama\xe7\xe3o',
  u'Representa\xe7\xe3o',
  'Requerimento',
  u'Refomula\xe7\xe3o de Parecer - art. 130, par\xe1grafo \xfanico do RICD.',
  u'Requerimento de Informa\xe7\xe3o',
  u'Requerimento de Resolu\xe7\xe3o Interna',
  u'Relat\xf3rio Final',
  u'Relat\xf3rio Pr\xe9vio',
  u'Relat\xf3rio Pr\xe9vio Reformulado',
  u'Relat\xf3rio Pr\xe9vio Vencedor',
  u'Relat\xf3rio Parcial',
  u'Relat\xf3rio Preliminar',
  u'Relat\xf3rio Preliminar Apresentado com Emendas',
  u'Relat\xf3rio Preliminar',
  u'Representa\xe7\xe3o',
  'RQA',
  'RQC',
  'Requerimento do Congresso Nacional',
  u'Requerimento de Plen\xe1rio',
  u'Relat\xf3rio de Receita',
  u'Relat\xf3rio do Relator',
  u'Reda\xe7\xe3o para o segundo turno',
  u'Mensagem de R\xe1dio e Televis\xe3o',
  u'Subemenda Aglutinativa Substitutiva de Plen\xe1rio',
  'Subemenda',
  u'Subemenda Adotada pela Comiss\xe3o',
  'Subemenda de Relator',
  'Substitutivo',
  u'Substitutivo adotado pela Comiss\xe3o',
  u'Sugest\xe3o de Emenda \xe0 LDO - CLP',
  u'Of\xedcio da Mesa',
  u'Solicita\xe7\xe3o de Informa\xe7\xe3o ao TCU',
  u'Sugest\xe3o de Emenda \xe0 LDO - Comiss\xf5es',
  u'Sugest\xe3o de Emenda ao Or\xe7amento - CLP',
  u'Sugest\xe3o de Emenda ao Or\xe7amento - Comiss\xf5es',
  u'Sugest\xe3o de Emenda ao PPA - CLP',
  u'Sugest\xe3o de Emenda ao PPA - revis\xe3o (CLP)',
  u'Sugest\xe3o de Emenda ao PPA - Comiss\xf5es',
  u'Sugest\xe3o de Emenda ao PPA - revis\xe3o (Comiss\xf5es)',
  u'Sugest\xe3o de Requerimento de Audi\xeancia P\xfablica',
  u'Sugest\xe3o de Emenda a Relat\xf3rio',
  u'Subemenda Substitutiva de Plen\xe1rio',
  u'Of\xedcio',
  u'Sugest\xe3o a Projeto de Consolida\xe7\xe3o de Leis',
  u'Sugest\xe3o',
  u'S\xfamula',
  u'Termo de Implementa\xe7\xe3o',
  u'Ato de Concess\xe3o e Renova\xe7\xe3o de Concess\xe3o de Emissora de R\xe1dio e Televis\xe3o',
  'Voto em Separado'],
 'genero': ['o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'a',
  'o',
  'a',
  'o',
  'a',
  'a',
  'a',
  'a',
  'a',
  'o',
  'o',
  'o',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'o',
  'o',
  'a',
  'a',
  'a',
  'o',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'o',
  'a',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'a',
  'o',
  'o',
  'a',
  'a',
  'a',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'a',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'a',
  'a',
  'o',
  'a',
  'a',
  'a',
  'o',
  'a',
  'o',
  'a',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'a',
  'o',
  'o',
  'o',
  'o',
  'o',
  'o',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'o',
  'o',
  'a',
  'o',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'o',
  'o',
  'a',
  'a',
  'o',
  'a',
  'a',
  'a',
  'o',
  'a',
  'o'],
 'tipoSigla': ['AA',
  'ADD',
  'ANEXO',
  'APJ',
  'ATC',
  'ATOP',
  'AV',
  'AVN',
  'CAC',
  'CAE',
  'CAE',
  'CCN',
  'COI',
  'CON',
  'CST',
  'CVO',
  'CVR',
  'DCR',
  'DEC',
  'DEN',
  'DIS',
  'DOC',
  'DTQ',
  'DVT',
  'EAG',
  'EMA',
  'EMC',
  'EMC-A',
  'EMD',
  'EML',
  'EMO',
  'EMP',
  'EMPV',
  'EMR',
  'EMRP',
  'EMS',
  'EPP',
  'ERD',
  'ERD-A',
  'ERR',
  'ESB',
  'ESP',
  'EXP',
  'IAN',
  'INA',
  'INC',
  'MAN',
  'MCN',
  'MMP',
  'MPV',
  'MSC',
  'MSF',
  'MSG',
  'MST',
  'MTC',
  'NIC',
  'NINF',
  'OBJ',
  'OF',
  'OF',
  'OF.',
  'OFN',
  'OFS',
  'OFT',
  'P.C',
  'PAR',
  'PARF',
  'PCA',
  'PDA',
  'PDC',
  'PDN',
  'PDS',
  'PEA',
  'PEC',
  'PEP',
  'PES',
  'PET',
  'PFC',
  'PIN',
  'PL',
  'PLC',
  'PLN',
  'PLP',
  'PLS',
  'PLV',
  'PPP',
  'PPP',
  'PPR',
  'PRA',
  'PRC',
  'PRF',
  'PRL',
  'PRN',
  'PRO',
  'PRP',
  'PRR',
  'PRST',
  'PRT',
  'PRV',
  'PRVP',
  'PSS',
  'PSS',
  'R.C',
  'RAT',
  'RCM',
  'RCP',
  'RDF',
  'RDV',
  'REC',
  'REL',
  'REM',
  'REP',
  'REQ',
  'RFP',
  'RIC',
  'RIN',
  'RLF',
  'RLP',
  'RLP(R)',
  'RLP(V)',
  'RPA',
  'RPL',
  'RPLE',
  'RPLOA',
  'RPR',
  'RQA',
  'RQC',
  'RQN',
  'RQP',
  'RRC',
  'RRL',
  'RST',
  'RTV',
  'SAP',
  'SBE',
  'SBE-A',
  'SBR',
  'SBT',
  'SBT-A',
  'SDL',
  'SGM',
  'SIT',
  'SLD',
  'SOA',
  'SOR',
  'SPA',
  'SPA-R',
  'SPP',
  'SPP-R',
  'SRAP',
  'SRL',
  'SSP',
  'STF',
  'SUC',
  'SUG',
  'SUM',
  'TER',
  'TVR',
  'VTS']}

A função descrita abaixo é uma query criada para captação da listagem de proposições sendo os parâmetros de entrada:

sgl = Sigla da proposição buscada

num = Número da proposição (este parâmetro não precisa ser preenchido caso seja uma captura geral de proposições)

year = Ano da proposição

datIni = Inicio do período pesquisado (respeitando o parâmetro year) com formato DD/MM/AAAA

datFinal = Final do período pesquisado (respeitando o parâmetro year) com formato DD/MM/AAAA

Para maiores informações sobre os parâmetros de entrada e saída desta consulta acessar: http://www2.camara.leg.br/transparencia/dados-abertos/dados-abertos-legislativo/webservices/proposicoes-1/listarproposicoes


In [6]:
def query_lista_prop(sgl=str(),num=str(),year=str(),datIni=str(),datFim=str()):
    consulta_lista_proposicoes = "http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla={sgl}&numero={num}&ano={year}&datApresentacaoIni={datIni}&datApresentacaoFim={datFim}&parteNomeAutor=&idTipoAutor=&siglaPartidoAutor=&siglaUFAutor=&generoAutor=&codEstado=&codOrgaoEstado=&emTramitacao=".format(sgl=sgl,num=num,year=year,datIni=datIni,datFim=datFim)
    return consulta_lista_proposicoes

In [7]:
query_lista_prop('PL','','2013','01/01/2013','31/12/2013')


Out[7]:
'http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla=PL&numero=&ano=2013&datApresentacaoIni=01/01/2013&datApresentacaoFim=31/12/2013&parteNomeAutor=&idTipoAutor=&siglaPartidoAutor=&siglaUFAutor=&generoAutor=&codEstado=&codOrgaoEstado=&emTramitacao='

In [8]:
BASE_URL = query_lista_prop('PL','','2013','06/01/2013','31/12/2013')

In [9]:
xml_page = urllib2.urlopen(BASE_URL)
str_page = xml_page.read()
root = ETree.fromstring(str_page)

In [10]:
len(root.findall('proposicao'))


Out[10]:
2107
Identificando os elementos da primeira dimensão do XML para extração de dados, estamos interessados no número e tipo de proposição

In [11]:
root[0].getchildren()


Out[11]:
[<Element 'id' at 0x45000f0>,
 <Element 'nome' at 0x45000b8>,
 <Element 'tipoProposicao' at 0x4500128>,
 <Element 'numero' at 0x4500208>,
 <Element 'ano' at 0x4500240>,
 <Element 'orgaoNumerador' at 0x4500278>,
 <Element 'datApresentacao' at 0x4500358>,
 <Element 'txtEmenta' at 0x45003c8>,
 <Element 'txtExplicacaoEmenta' at 0x4500438>,
 <Element 'regime' at 0x4500470>,
 <Element 'apreciacao' at 0x4500518>,
 <Element 'autor1' at 0x45005c0>,
 <Element 'qtdAutores' at 0x4500748>,
 <Element 'ultimoDespacho' at 0x4500780>,
 <Element 'situacao' at 0x4500860>,
 <Element 'indGenero' at 0x4500b38>,
 <Element 'qtdOrgaosComEstado' at 0x4500ba8>]

Os elementos de uma árvore podem possuir outros elementos abaixo, neste caso, basta adicionar uma nova dimensão de busca por índice como feito abaixo, onde a primeira dimensão representa o nó "proposicao" a segunda dimensão representa o nó "proposicao/apreciacao" e a terceira dimensão representa o nó "proposicao/apreciacao/txtApreciacao".

Para descobrir se existem nós dentro de outros nós podemos utilizar a função getchildren() em elementos já obtidos através da mesma função, a seguir uma exemplificação


In [12]:
root[0][2].getchildren() #Aplicando getchildren no elemento 'tipoProposicao', onde são identificados outros nós


Out[12]:
[<Element 'id' at 0x4500160>,
 <Element 'sigla' at 0x4500198>,
 <Element 'nome' at 0x45001d0>]

O código a seguir extrai elementos textuais contidos em um nó


In [13]:
root[0][10][1].text


Out[13]:
u'Proposi\xe7\xe3o Sujeita \xe0 Aprecia\xe7\xe3o Conclusiva pelas Comiss\xf5es - Art. 24 II'

Estamos interessados em 3 informações para uma busca mais detalhada da proposição no banco de dados "ObterProposicao", com isso precisamos definir um dicionário que contém: Tipo,Número,ano. Abaixo será definida uma função para captura de tais informações.

Como podemos observar na exploração realizada anteriormente, estes dados encontram-se como "filhos" do nó "proposicao", abaixo é apresentado uma proposta para armazenar tais dados.


In [14]:
test = {'Tipo':['PL','MP','PL'],'Numero':[12,34,56],'Ano':[2013,2013,2011]}

In [15]:
test


Out[15]:
{'Ano': [2013, 2013, 2011], 'Numero': [12, 34, 56], 'Tipo': ['PL', 'MP', 'PL']}

In [16]:
test['Ano']


Out[16]:
[2013, 2013, 2011]
test.keys()

In [17]:
def input_ObterProposicao(root):
    dicionario = {'Tipo':[],'Numero':[],'Ano':[]}
    for i in range(len(root)):
        dicionario['Tipo'].append(root[i][2][1].text)
        dicionario['Numero'].append(root[i][3].text)
        dicionario['Ano'].append(root[i][4].text)
    return dicionario

In [18]:
test = input_ObterProposicao(root)

In [19]:
test['Tipo'][0:10]


Out[19]:
['PL', 'PL', 'PL', 'PL', 'PL', 'PL', 'PL', 'PL', 'PL', 'PL']

In [20]:
test['Numero'][0:10]


Out[20]:
['7029',
 '7028',
 '7027',
 '7026',
 '7025',
 '7024',
 '7023',
 '7022',
 '7021',
 '7020']

In [21]:
test['Ano'][0:10]


Out[21]:
['2013',
 '2013',
 '2013',
 '2013',
 '2013',
 '2013',
 '2013',
 '2013',
 '2013',
 '2013']

In [21]:

Dado que temos uma listagem de proposições, podemos utilizar este banco para buscar novas informações sobre uma dada proposição. Estas informações estão disponíveis no banco ObterProposicao.

http://www2.camara.leg.br/transparencia/dados-abertos/dados-abertos-legislativo/webservices/proposicoes-1/obterproposicao

Neste estudo estaremos buscando as seguintes informações:

Autor: Nome do autor da proposição

Tema: Tema da proposição

apensadas: Proposições com assuntos semelhantes.

Indexação: Indexação (palavras-chave) associada à proposição

Além destas informações, também estamos interessados no posicionamento dos Deputados quanto a esta proposição, para isso será acessado o banco de dados da votação de cada proposição, indicado o o Deputado, o voto, a unidade da federação ao qual o deputado representa e a sigla do partido do deputado, estas informações estão disponíveis no banco. Para isso serão criadas querys e dicionários que receberão tais informações.


In [22]:
def query_obterProposicao(typ=str(),number=str(),year=str()):
    consulta = 'http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ObterProposicao?tipo={typ}&numero={number}&ano={year}'.format(typ=typ,number=number,year=year)
    return consulta

Para fins de teste, utilizaremos dados a partir do dicionário criado a partir dos dados de ListarProposicao


In [50]:
BASE_URL2 = query_obterProposicao(test['Tipo'][2],test['Numero'][2],test['Ano'][1])

In [51]:
BASE_URL2


Out[51]:
'http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ObterProposicao?tipo=PL&numero=7027&ano=2013'

In [52]:
xml_page2 = urllib2.urlopen(BASE_URL2)
str_page2 = xml_page2.read()
root2 = ETree.fromstring(str_page2)

In [53]:
print str_page2


<?xml version="1.0" encoding="utf-8"?>
<proposicao tipo="PL        " numero="7027" ano="2013">
  <nomeProposicao>PL 7027/2013</nomeProposicao>
  <idProposicao>605291</idProposicao>
  <idProposicaoPrincipal>
  </idProposicaoPrincipal>
  <nomeProposicaoOrigem>
  </nomeProposicaoOrigem>
  <tipoProposicao>Projeto de Lei</tipoProposicao>
  <tema>Organização Política, Partidária e Eleitoral</tema>
  <Ementa>Cria cargos efetivos e funções comissionadas nos quadros de pessoal dos Tribunais Regionais Eleitorais, destinados às zonas eleitorais e transforma funções de chefes de cartórios.</Ementa>
  <ExplicacaoEmenta>
  </ExplicacaoEmenta>
  <Autor>TRIBUNAL SUPERIOR ELEITORAL</Autor>
  <DataApresentacao>20/12/2013</DataApresentacao>
  <RegimeTramitacao>Prioridade</RegimeTramitacao>
  <UltimoDespacho Data="04/02/2014">Às Comissões de Trabalho, de Administração e Serviço Público; Finanças e Tributação (Art. 54 RICD) e Constituição e Justiça e de Cidadania (Art. 54 RICD) - Art. 24, IIProposição Sujeita à Apreciação Conclusiva pelas Comissões - Art. 24 IIRegime de Tramitação: Prioridade</UltimoDespacho>
  <Apreciacao>Proposição Sujeita à Apreciação Conclusiva pelas Comissões - Art. 24 II</Apreciacao>
  <Indexacao>Criação, cargo efetivo, função de confiança, Tribunal Regional Eleitoral (TRE), destinação, zona eleitoral, transformação, função, chefe, cartório eleitoral.</Indexacao>
  <Situacao>CFT - Pronta para Pauta</Situacao>
  <LinkInteiroTeor>http://www.camara.gov.br/proposicoesWeb/prop_mostrarintegra?codteor=1215752</LinkInteiroTeor>
  <apensadas />
</proposicao>

In [28]:
root2.getchildren()


Out[28]:
[<Element 'nomeProposicao' at 0xb5014a8>,
 <Element 'idProposicao' at 0xb501240>,
 <Element 'idProposicaoPrincipal' at 0xb501048>,
 <Element 'nomeProposicaoOrigem' at 0xb501588>,
 <Element 'tipoProposicao' at 0xb5015c0>,
 <Element 'tema' at 0xb5015f8>,
 <Element 'Ementa' at 0xb501630>,
 <Element 'ExplicacaoEmenta' at 0xb5016a0>,
 <Element 'Autor' at 0xb5016d8>,
 <Element 'DataApresentacao' at 0xb501748>,
 <Element 'RegimeTramitacao' at 0xb5017b8>,
 <Element 'UltimoDespacho' at 0xb5017f0>,
 <Element 'Apreciacao' at 0xb501828>,
 <Element 'Indexacao' at 0xb501860>,
 <Element 'Situacao' at 0xb501898>,
 <Element 'LinkInteiroTeor' at 0xb5018d0>,
 <Element 'apensadas' at 0xb501908>]

Posição 8 = Autor Posição 13 = Indexacao Posição 16 = apensadas


In [93]:
def informacoes_Proposicao(root2):
    dicionario = {'Numero':[],'Tipo':[],'Ano':[],'Autor':[],'Tema':[],'Indexacao':[],'Apensadas':[]}
    dicionario['Numero'].append(root2.get('numero'))
    dicionario['Tipo'].append(root2.get('tipo').strip())
    dicionario['Ano'].append(root2.get('ano'))
    dicionario['Tema'].append(root2[5].text)
    dicionario['Autor'].append(root2[8].text)
    dicionario['Indexacao'].append(root2[13].text.split())
    dicionario['Apensadas'].append(root2[16].text)
    dicionario['Indexacao'] = dicionario['Indexacao'][0] 
    return dicionario

In [94]:
teste2 = informacoes_Proposicao(root2)

In [95]:
teste2


Out[95]:
{'Ano': ['2013'],
 'Apensadas': [None],
 'Autor': ['TRIBUNAL SUPERIOR ELEITORAL'],
 'Indexacao': [u'Cria\xe7\xe3o,',
  u'cargo',
  u'efetivo,',
  u'fun\xe7\xe3o',
  u'de',
  u'confian\xe7a,',
  u'Tribunal',
  u'Regional',
  u'Eleitoral',
  u'(TRE),',
  u'destina\xe7\xe3o,',
  u'zona',
  u'eleitoral,',
  u'transforma\xe7\xe3o,',
  u'fun\xe7\xe3o,',
  u'chefe,',
  u'cart\xf3rio',
  u'eleitoral.'],
 'Numero': ['7027'],
 'Tema': [u'Organiza\xe7\xe3o Pol\xedtica, Partid\xe1ria e Eleitoral'],
 'Tipo': ['PL']}

In [92]:
root2[5].text


Out[92]:
u'Organiza\xe7\xe3o Pol\xedtica, Partid\xe1ria e Eleitoral'

In [66]:
teste2['Indexacao'][0].split()


Out[66]:
u'de'

In [ ]: