I'm getting the error below when I'm parsing the xml from the URL in the code. I won't post the XML because it's huge. The link is in the code below.
ERROR:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-70-77e5e1b79ccc> in <module>()
11
12 for child in root.iter('Materia'):
---> 13 if not child.find('EmentaMateria').text is None:
14 ementa = child.find('EmentaMateria').text
15
AttributeError: 'NoneType' object has no attribute 'text'
MY CODE:
url = 'http://legis.senado.leg.br/dadosabertos/senador/4988/autorias'
import requests
from xml.etree import ElementTree
response = requests.get(url, stream=True)
response.raw.decode_content = True
tree = ElementTree.parse(response.raw)
root = tree.getroot()
for child in root.iter('Materia'):
if child.find('EmentaMateria').text is not None:
ementa = child.find('EmentaMateria').text
for child_IdMateria in child.findall('IdentificacaoMateria'):
anoMateria = child_IdMateria.find('AnoMateria').text
materia = child_IdMateria.find('NumeroMateria').text
siglaMateria = child_IdMateria.find('SiglaSubtipoMateria').text
print('Ano = '+anoMateria+' | Numero Materia = '+materia+' | tipo = '+siglaMateria+' | '+ementa)
What I'm overlooking here? Thanks
Instead of checking if child.find('EmentaMateria').text
is not None
, you should make sure that child.find('EmentaMateria')
is not None
first.
Also, you should store the returning value of child.find('EmentaMateria')
to avoid calling it twice.
Lastly, you should assign ementa
a default value if child.find('EmentaMateria')
is None
; otherwise your print
function below will be referencing an un-initialized variable.
Change:
if child.find('EmentaMateria').text is not None:
ementa = child.find('EmentaMateria').text
to:
node = child.find('EmentaMateria')
if node is not None:
ementa = node.text
else:
ementa = None
Alternatively, you can use the built-in function getattr
to do the same without a temporary variable:
ementa = getattr(child.find('EmentaMateria'), 'text', None)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With