From 4341f83928a3b60d8a8035a5fb6f737531f53726 Mon Sep 17 00:00:00 2001 From: Marcelo Andriolli Date: Sat, 19 May 2018 18:00:28 -0300 Subject: [PATCH] Scraped data from auction details page #4 --- comprasnet/__init__.py | 26 +- .../unit/test_class_statute_auction_detail.py | 239 +++++++++++------- 2 files changed, 168 insertions(+), 97 deletions(-) diff --git a/comprasnet/__init__.py b/comprasnet/__init__.py index 0c827e7..9944c8a 100644 --- a/comprasnet/__init__.py +++ b/comprasnet/__init__.py @@ -358,8 +358,8 @@ def get_data(self): def scrap_data(self): output = { - 'codigo-da-uasg': self.uasg_code, - 'pregao-eletronico': self.auction_code, + 'codigo-da-uasg': int(self.uasg_code), + 'pregao-eletronico': int(self.auction_code), } data = self.get_data() bs_object = BeautifulSoup(data, "html.parser") @@ -371,14 +371,26 @@ def scrap_data(self): output['itens'] = [] for items in items_table.find_all('tr'): item = {} - description = items.find('span', class_='tex3b') + header = items.find('span', class_='tex3b') + description = items.find('span', class_='tex3') try: - item_number, description = description.text.split(' - ')[:2] - item['numero'] = item_number - item['descricao'] = description.strip() + item_number, title = header.text.split(' - ')[:2] + item['numero'] = int(item_number) + item['titulo'] = title.strip() + + description = str(description).split('
') + description_text = description[0].split('
') + description_text = description_text[0].split('')[1] + diff_treattment = description[1].split(':') + + item['tratamento-diferenciado'] = diff_treattment[1].strip() + item['aplicabilidade-decreto'] = description[2].split(':')[1].strip() + item['aplicabilidade-margem-de-preferencia'] = description[3].split(':')[1].strip() + item['quantidade'] = int(description[4].split(':')[1].strip()) + item['unidade-de-fornecimento'] = description[5].split(':')[1].strip('').split()[0] output['itens'].append(item) - except ValueError as e: + except (ValueError, IndexError) as e: log.error('error on extract description in "{}". {}'.format( items, self.url)) log.exception(e) diff --git a/tests/unit/test_class_statute_auction_detail.py b/tests/unit/test_class_statute_auction_detail.py index 3383299..85766fe 100644 --- a/tests/unit/test_class_statute_auction_detail.py +++ b/tests/unit/test_class_statute_auction_detail.py @@ -47,95 +47,154 @@ def test_method_scrap_data(get_data): get_data.return_value = page_content - output = { - 'pregao-eletronico': 32018, - 'itens': [ - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '1' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '2' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '3' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '4' - }, - { - 'descricao': 'Chamadas Locais Móvel-Móvel Intraoperadora SMP-Local-MM-IO(VC1)', - 'numero': '5' - }, - { - 'descricao': 'Chamadas Locais Móvel-Móvel Extraoperadora SMP-Local-MM-EO(VC1)', - 'numero': '6' - }, - { - 'descricao': 'Chamadas Locais Móvel-Fixo SMP-Local-MF (VC1)', - 'numero': '7' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '8' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '9' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '10' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '11' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '12' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '13' - }, - { - 'descricao': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', - 'numero': '14' - }, - { - 'descricao': 'Chamadas Nacionais Móvel-Móvel Intraoperadora SMP-LDN-MM-IO(VC2 ' - 'e VC3)', - 'numero': '15' - }, - { - 'descricao': 'Chamadas Nacionais Móvel-Móvel Extraoperadora SMP-LDN-MM-EO(VC2 ' - 'e VC3)', - 'numero': '16' - }, - { - 'descricao': 'Chamadas Nacionais Móvel-Fixo SMP-LDM-MF (VC2 e VC3)', - 'numero': '17' - }, - { - 'descricao': 'Chamadas Nacionais Móvel-Móvel Intraoperadora SMP-LDN-MM-IO(VC2 ' - 'e VC3)', - 'numero': '18' - }, - { - 'descricao': 'Chamadas Nacionais Móvel-Móvel Extraoperadora SMP-LDN-MM-EO(VC2 ' - 'e VC3)', - 'numero': '19' - }, - { - 'descricao': 'Chamadas Nacionais Móvel-Fixo SMP-LDM-MF (VC2 e VC3)', - 'numero': '20' - } - ], - 'codigo-da-uasg': 160478 - } + output = {'codigo-da-uasg': 160478, + 'itens': [{'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 1, + 'quantidade': 60, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Assinatura'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 2, + 'quantidade': 60, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Assinatura'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 3, + 'quantidade': 60, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Assinatura'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 4, + 'quantidade': 60, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Assinatura'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 5, + 'quantidade': 6000, + 'titulo': 'Chamadas Locais Móvel-Móvel Intraoperadora ' + 'SMP-Local-MM-IO(VC1)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 6, + 'quantidade': 6000, + 'titulo': 'Chamadas Locais Móvel-Móvel Extraoperadora ' + 'SMP-Local-MM-EO(VC1)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 7, + 'quantidade': 6000, + 'titulo': 'Chamadas Locais Móvel-Fixo SMP-Local-MF (VC1)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 8, + 'quantidade': 12000, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 9, + 'quantidade': 6000, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 10, + 'quantidade': 9000, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Ligação'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 11, + 'quantidade': 9000, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Ligação'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 12, + 'quantidade': 1800, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 13, + 'quantidade': 3000, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Mensagem'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 14, + 'quantidade': 3000, + 'titulo': 'Pacote de Serviços SMP (Voz, Dados, SMS, Etc)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Mensagem'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 15, + 'quantidade': 6000, + 'titulo': 'Chamadas Nacionais Móvel-Móvel Intraoperadora ' + 'SMP-LDN-MM-IO(VC2 e VC3)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 16, + 'quantidade': 6000, + 'titulo': 'Chamadas Nacionais Móvel-Móvel Extraoperadora ' + 'SMP-LDN-MM-EO(VC2 e VC3)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 17, + 'quantidade': 6000, + 'titulo': 'Chamadas Nacionais Móvel-Fixo SMP-LDM-MF (VC2 e VC3)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 18, + 'quantidade': 6000, + 'titulo': 'Chamadas Nacionais Móvel-Móvel Intraoperadora ' + 'SMP-LDN-MM-IO(VC2 e VC3)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 19, + 'quantidade': 6000, + 'titulo': 'Chamadas Nacionais Móvel-Móvel Extraoperadora ' + 'SMP-LDN-MM-EO(VC2 e VC3)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}, + {'aplicabilidade-decreto': 'Não', + 'aplicabilidade-margem-de-preferencia': 'Não', + 'numero': 20, + 'quantidade': 6000, + 'titulo': 'Chamadas Nacionais Móvel-Fixo SMP-LDM-MF (VC2 e VC3)', + 'tratamento-diferenciado': '-', + 'unidade-de-fornecimento': 'Minutos'}], + 'pregao-eletronico': 32018} + assert statuse_detail.scrap_data() == output assert statuse_detail.data == output