def test_parse(self): response = fake_response_from_file('citybeerstore.html', self.spider.start_urls[0]) results = self.spider.parse(response) names = [i['name'] for i in results] print repr(names) self.assertEqual(names, self.expected)
def test_parse(self): results = self.spider.parse(fake_response_from_file('samples/wiprodigital_index.html', 'http://wiprodigital.com')) for r in results: if type(r) is SiteMapItem: item = r # testing that the URLs are represented as a set is a bit iffy and too close to the implementation; we may want to think about converting everything to lists, or iterating through to compare contents sample_results = { 'external_links': set([ 'http://subdomain.subdomain.wiprodigital.com/4', 'http://external.com/3', 'https://external.com/1' ]), 'images': set([ 'http://wiprodigital.com/imgpath/2.jpg', 'http://11689-presscdn-0-83.pagely.netdna-cdn.com/wp-content/uploads/2015/09/WD_logo_150X27.png' ]), 'internal_links': set([ 'http://wiprodigital.com/2', 'http://wiprodigital.com/', 'http://wiprodigital.com/#section-1', 'http://wiprodigital.com/#section-2' ]), 'url': 'http://wiprodigital.com' } self.assertEqual(item, sample_results)
def test_get_next_playing_page_info(self): response = fake_response_from_file('now.html', 'http://eiga.com/now/') (next_page_no, next_page_url) = self.spider.get_next_playing_page_info(response) self.assertEqual(next_page_no, 2) self.assertEqual(next_page_url, 'http://eiga.com/now/all/release/2/')
def test_parse_one_scheduled_page(self): response = fake_response_from_file('coming.html', 'http://eiga.com/coming/') movie_ids = { "79353", "82706", "83875", "84631", "84477", "85056", "84451", "84614", "84834", "84892", "84842", "85140", "84500", "85205", "46697", "84600", "85066", "81783", "84978", "85160", "83801", "85097", "83738", "83222", "84186", "84847", "85178", "84841", "84844", "84836", "84848", "84846", "82996", "82020", "84851", "84858", "84843", "84855", "83980", "81388", "84837", "83938", "84802", "85114", "82812", "84298", "85212", "84824", "8002", "9134", "84796", "84719", "84971", "83015", "84953", "83951", "30164", "84831", "84774", "84954", "84912", "84838", "84832", "84830", "84854", "81507", "84852", "84850", "79978", "82152", "84480", "84827", "83238", "83642", "83151", "83981", "80040", "83904", "83158", "82363", "84839", "84632", "83941", "81042", "82938", "84849", "84856" } results = self.spider.parse_one_scheduled_page(response) for m in results: self.assertFalse(m['in_theater']) parsed_ids = [m['id'] for m in results] self.assertEqual(len(parsed_ids), len(movie_ids)) self.assertEqual(set(parsed_ids), movie_ids)
def test_get_next_playing_page_info_on_last_page(self): response = fake_response_from_file('now_18.html', 'http://eiga.com/now/') (next_page_no, next_page_url) = self.spider.get_next_playing_page_info(response) self.assertEqual(next_page_no, -1) self.assertEqual(next_page_url, None)
def test_parse(self): results_generator = self.spider.parse( fake_response_from_file('contrataciones.html')) first_yielded_result = results_generator.next() exp_body = 'procedimientotipo=0&q=&rubro=&pagina=1&procedimiento=&novigentes=1&organismo=&procedimientoanio=2015' self.assertEqual(first_yielded_result.body, exp_body)
def test_parse_generates_objects_correctly(self): results = self.spider.parse(fake_response_from_file('/costco.html')) self.assertTrue(type(results) is list) self.assertEqual(38, len(results)) self.assertTrue(type(results[0] is dict)) self.assertEqual('Kirkland Signature Organic Ethiopia Whole Bean Coffee, 2 lbs., 2-count', results[0]["name"]) self.assertEqual('$39.99', results[0]["price"]) self.assertEqual('costco', results[0]["seller"])
def test_parse_generates_objects_correctly(self): results = self.spider.parse(fake_response_from_file('/amazon.html')) self.assertTrue(type(results) is list) self.assertEqual(3, len(results)) self.assertTrue(type(results[0] is dict)) self.assertEqual('Pace Medium Chunky Salsa, 64 Ounce', results[0]["name"]) self.assertEqual(None, results[0]["price"]) self.assertEqual('amazon', results[0]["seller"])
def test_parse_one_playing_page(self): response = fake_response_from_file('now.html', 'http://eiga.com/now/') movie_ids = { "82416", "83989", "84660", "84613", "83940", "83401", "82200", "81957", "83984", "85051", "82859", "84894", "85040", "85204", "85065", "85130", "85029", "81531", "79719", "82707" } results = self.spider.parse_one_playing_page(response) for m in results: self.assertTrue(m['in_theater']) parsed_ids = [m['id'] for m in results] self.assertEqual(len(parsed_ids), 20) self.assertEqual(set(parsed_ids), movie_ids)
def test_parse_filter(self): results_generator = self.spider.parse_filter( fake_response_from_file('sgp_filter.html', request_meta=self.request_meta)) first_yielded_result = results_generator.next() self.assertEqual(first_yielded_result.url, 'http://www.sgp.gob.ar/sitio/empleo/regimenes/contratados/listadocontratados/todos_los_contratos_mensuales/02345_200004_rcpc_todoa.html') self.assertEqual(first_yielded_result.meta[ 'organismo'], 'Administración General de Puertos S E') self.assertEqual(first_yielded_result.meta[ 'modalidad'], "Decreto N° 2.345/08") self.assertEqual(first_yielded_result.meta[ 'jurisdiccion'], "Ministerio de Transporte")
def test_parse(self): results_generator = self.spider.parse( fake_response_from_file('sgp_index.html')) first_yielded_result = results_generator.next() self.assertEqual(first_yielded_result.url, "http://www.sgp.gob.ar/sitio/empleo/regimenes/contratados/listadocontratados/todos_los_contratos_mensuales/02345_200004_index_rcpc.html") self.assertEqual(first_yielded_result.meta[ 'organismo'], 'Administración General de Puertos S E') self.assertEqual(first_yielded_result.meta[ 'modalidad'], "Decreto N° 2.345/08") self.assertEqual(first_yielded_result.meta[ 'jurisdiccion'], "Ministerio de Transporte") # Al pasarlo a lista se consume el resto de los valores del generator. # Sumo 1 porque el primero ya lo verificamos arriba self.assertEqual(len(list(results_generator)) + 1, 5)
def test_parse_people(self): results_generator = self.spider.parse_people( fake_response_from_file('sgp_people.html', request_meta=self.request_meta)) first_yielded_result = results_generator.next() expected_first_person = { 'apellido': ' Cordero', 'contrato': '0040E2015', 'cuit': '20-07576779-0', 'dedicacion': '100%', 'desde': '01/07/2015', 'hasta': '31/12/2015', 'jurisdiccion': 'Ministerio de Transporte', 'modalidad': "Decreto N° 2.345/08", 'nombre': 'Jose Luis', 'observacion': 'RE-En tramite-01/07/2015', 'organismo': 'Administración General de Puertos S E', 'tipo': 'Serv.' } self.assertEqual(first_yielded_result, expected_first_person) last_yielded_result = results_generator.next() expected_second_person = { 'apellido': ' Schwarz', 'contrato': '0041E2015', 'cuit': '20-08186164-2', 'dedicacion': '100%', 'desde': '01/07/2015', 'hasta': '31/12/2015', 'jurisdiccion': 'Ministerio de Transporte', 'modalidad': "Decreto N° 2.345/08", 'nombre': 'Eduardo Alberto', 'observacion': 'RE-En tramite-01/07/2015', 'organismo': 'Administración General de Puertos S E', 'tipo': 'Serv.' } self.assertEqual(last_yielded_result, expected_second_person) # Como ya consumi los dos unicos valores, la cantidad de valores en el # generator deberia ser 0 ahora self.assertEqual(len(list(results_generator)) + 2, 2)
def setUp(self): fake_response = fake_response_from_file('fixtures/compose.html') self.scraper = ClusterScraper(fake_response)
def test_contrataciones_page(self): results_generator = self.spider.parse_pagina_contratacion( fake_response_from_file('contratacion_320834.html')) results = list(results_generator) expected_results = [ {u'clase': u'De etapa \xc3\xbanica nacional', 'estado': 'orden_de_compra', 'id': 'ID_CONTRATACION', 'id_organismo': u'250', 'id_procedimiento': u'2/2012', 'id_unidad_operativa': u'DEPARTAMENTO COMPRAS Y SUMINISTROS', u'modalidad': u'Sin Modalidad', u'objeto': u'SERVICIO DE CORREO', 'organismo': u'CAJA DE RETIROS, JUB. Y PENS. DE LA POLICIA FEDERAL', 'procedimiento': u'Licitaci\xc3\xb3n P\xc3\xbablica', u'rubros': u'SERVICIOS BASICOS', 'unidad_operativa': u'0022/000'}, {u'autoridad': u'SILVIA DJENDEREDJIAN - GUIDO TOMAS DE VARGAS CARDOSO', 'contratacion_id': 'ID_CONTRATACION', u'dependencia': u'CAJA DE RETIROS, JUBILACIONES Y PENSIONES DE LA POLIC\xc3\ufffdA FEDERAL.-', u'fecha': u'2012/09/03 00:00', u'firmante': u'SILVIA DJENDEREDJIAN - GUIDO TOMAS DE VARGAS CARDOSO'}, {'cuit': u'30536259194', 'forma_garantia': u'POLIZA DE CAUCION', 'id_apertura': 'ID_CONTRATACION', 'monto_garantia': u'55000', 'monto_oferta': u'550.3', 'numero': u'1', 'razon_social': u'ORGANIZACION COORDINADORA ARGENTINA S.R.L.'}, {'cuit': u'30708574836', 'forma_garantia': u'POLIZA DE CAUCION', 'id_apertura': 'ID_CONTRATACION', 'monto_garantia': u'50000', 'monto_oferta': u'1270.98', 'numero': u'2', 'razon_social': u'CORREO OFICIAL DE LA REPUBLICA ARGENTINA S.A.'}, {'aut_compenente': u'DR JUAN CARLOS SIRO PITTANO - DIRECTOR G', 'dependencia': u'CAJA DE RETIROS, JUBILACIONES Y PENSIONE', 'ejercicio': u'2012', 'fecha': u'10/10/2012', 'id': 'ID_CONTRATACION', 'modo': u'1', 'num': u'15', 'obs_grales': u'VER ARCHIVO ADJUNTO.-', 'tipo_acto': u'Disposici\xc3\xb3n'}, {'id_adjudicacion': 'ID_CONTRATACION', 'id_proveedor': u'30536259194', 'monto': u'318.6', 'observaciones': u'', 'razon_social': u'ORGANIZACION COORDINADORA ARGENTINA S.R.L.'}, {'id_adjudicacion': 'ID_CONTRATACION', 'id_proveedor': u'30708574836', 'monto': u'1470.64', 'observaciones': u'', 'razon_social': u'CORREO OFICIAL DE LA REPUBLICA ARGENTINA SA'}, {u'ejercicio': u'2012', 'id': u'ID_CONTRATACION_30536259194', 'id_contratacion': 'ID_CONTRATACION', u'id_proveedor': u'30536259194', u'num': u'25'}, {u'ejercicio': u'2012', 'id': u'ID_CONTRATACION_30708574836', 'id_contratacion': 'ID_CONTRATACION', u'id_proveedor': u'30708574836', u'num': u'26'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30536259194_1', 'id_oc': u'ID_CONTRATACION_30536259194', u'precio_unit': u'5.4', u'renglon': u'1', u'total': u'5.4', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'TELEGRAMAS; TELEGRAMA -.', 'id': u'ID_CONTRATACION_30536259194_6', 'id_oc': u'ID_CONTRATACION_30536259194', u'precio_unit': u'306.6', u'renglon': u'6', u'total': u'306.6', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30536259194_8', 'id_oc': u'ID_CONTRATACION_30536259194', u'precio_unit': u'6.6', u'renglon': u'8', u'total': u'6.6', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30708574836_2', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'38.4', u'renglon': u'2', u'total': u'38.4', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30708574836_3', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'4.8', u'renglon': u'3', u'total': u'4.8', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30708574836_4', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'28.66', u'renglon': u'4', u'total': u'28.66', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30708574836_5', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'39.6', u'renglon': u'5', u'total': u'39.6', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30708574836_7', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'60', u'renglon': u'7', u'total': u'60', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30708574836_9', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'103.46', u'renglon': u'9', u'total': u'103.46', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30708574836_10', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'137.56', u'renglon': u'10', u'total': u'137.56', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'SERVICIO POSTAL; SERVICIO POSTAL -.', 'id': u'ID_CONTRATACION_30708574836_11', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'165.54', u'renglon': u'11', u'total': u'165.54', u'total_iva': u'0'}, {u'cantidad': u'1', u'especificacion': u'TELEGRAMAS; TELEGRAMA -.', 'id': u'ID_CONTRATACION_30708574836_12', 'id_oc': u'ID_CONTRATACION_30708574836', u'precio_unit': u'892.62', u'renglon': u'12', u'total': u'892.62', u'total_iva': u'0'} ] self.assertEqual(len(results), len(expected_results)) for (r,er) in zip(results, expected_results) : self.assertEqual(r, er)
def test_parse(self): results = self.spider.parse( fake_response_from_file('osdir/sample.html')) self._test_item_results(results, 10)
def test_parse_search(self): results_generator = self.spider.parse_search( fake_response_from_file('test_unidades_operativas.html')) results = list(results_generator) expected_results = [ {'direccion': u'27DEFEBRERO210BIS(OCAMPOYESMERALDA)', 'email': u'*****@*****.**', 'id': u'0440_000 - COMPRAS', 'jurisdiccion': None, 'localidad': u'ROSARIO - SANTA FE - Argentina', 'pertenece_spn': False, 'serv_adm_financiero': u'FUNDACION DEL INSTITUTO DE BIOLOGIA MOLECULAR Y CELULAR DE ROSARIO', 'subjurisdiccion': None, 'tel': u'54-341-4237070', 'unidad_op_compra': u'0440_000 - COMPRAS'}, {'direccion': u'BRASILN\xb055', 'email': u'*****@*****.**', 'id': u'0313_000 - DEPARTAMENTO DE COMPRAS Y CONTRATACIONES - ANSV', 'jurisdiccion': u'30-MINISTERIO DEL INTERIOR Y TRANSPORTE', 'localidad': u'SAN TELMO - CIUDAD DE BUENOS AIRES - Argentina', 'pertenece_spn': True, 'serv_adm_financiero': u'203-AGENCIA NACIONAL DE SEGURIDAD VIAL', 'subjurisdiccion': u'00-MINISTERIO DEL INTERIOR Y TRANSPORTE', 'tel': u'5295-2400INT1151-1138-1178', 'unidad_op_compra': u'0313_000 - DEPARTAMENTO DE COMPRAS Y CONTRATACIONES - ANSV'}, {'direccion': u'AV.PASEOCOLON533', 'email': u'*****@*****.**', 'id': u'0037_006 - ESCUELA SUPERIOR DE GENDARMERIA NACIONAL', 'jurisdiccion': u'41-MINISTERIO DE SEGURIDAD', 'localidad': u'SAN TELMO - CIUDAD DE BUENOS AIRES - Argentina', 'pertenece_spn': True, 'serv_adm_financiero': u'375-GENDARMERIA NACIONAL', 'subjurisdiccion': u'05-GENDARMERIA NACIONAL', 'tel': u'(11)5169-3319', 'unidad_op_compra': u'0037_006 - ESCUELA SUPERIOR DE GENDARMERIA NACIONAL'}, {'direccion': u'AV.LEANDRON.ALEM246', 'email': u'*****@*****.**', 'id': u'0081_002 - ADQUISICIONES Y COMPRAS', 'jurisdiccion': None, 'localidad': u'SAN NICOLAS - CIUDAD DE BUENOS AIRES - Argentina', 'pertenece_spn': False, 'serv_adm_financiero': u'MINISTERIO DEL INTERIOR Y TRANSPORTE - ARCHIVO GENERAL DE LA NACION', 'subjurisdiccion': None, 'tel': u'4342-2412', 'unidad_op_compra': u'0081_002 - ADQUISICIONES Y COMPRAS'}, {'direccion': u'ESMERALDA1212', 'email': u'*****@*****.**', 'id': u'0026_000 - DIRECCI\xd3N DE COMPRAS Y CONTRATACIONES', 'jurisdiccion': u'35-MINISTERIO DE RELACIONES EXTERIORES Y CULTO', 'localidad': u'RETIRO - CIUDAD DE BUENOS AIRES - Argentina', 'pertenece_spn': True, 'serv_adm_financiero': u'307-MINISTERIO DE RELACIONES EXTERIORES Y CULTO', 'subjurisdiccion': u'00-MINISTERIO DE RELACIONES EXTERIORES Y CULTO', 'tel': u'4819-7065', 'unidad_op_compra': u'0026_000 - DIRECCI\xd3N DE COMPRAS Y CONTRATACIONES'}, {'direccion': u'MU\xd1ECAS436', 'email': u'*****@*****.**', 'id': u'0102_006 - DEPARTAMENTO DE COMPRAS - FACULTAD DE DERECHO Y CIENCIAS SOCIALES', 'jurisdiccion': u'70-MINISTERIO DE EDUCACION', 'localidad': u'SAN MIGUEL DE TUCUMAN - TUCUMAN - Argentina', 'pertenece_spn': True, 'serv_adm_financiero': u'836-UNIVERSIDAD NACIONAL DE TUCUMAN ', 'subjurisdiccion': u'00-MINISTERIO DE EDUCACION', 'tel': u'0381-4219975-INT.40', 'unidad_op_compra': u'0102_006 - DEPARTAMENTO DE COMPRAS - FACULTAD DE DERECHO Y CIENCIAS SOCIALES'}, {'direccion': u'DR.MARIANOGONZALEZS/N', 'email': u'*****@*****.**', 'id': u'0040_024 - DEPARTAMENTO DE CONTRATACIONES COMODORO RIVADAVIA', 'jurisdiccion': u'45-MINISTERIO DE DEFENSA', 'localidad': u'COMODORO RIVADAVIA - CHUBUT - Argentina', 'pertenece_spn': True, 'serv_adm_financiero': u'381-FUERZA AEREA ARGENTINA', 'subjurisdiccion': u'23-ESTADO MAYOR GENERAL DE LA FUERZA AEREA', 'tel': u'0297-4064746', 'unidad_op_compra': u'0040_024 - DEPARTAMENTO DE CONTRATACIONES COMODORO RIVADAVIA'}, {'direccion': u'BELGRANO450', 'email': u'*****@*****.**', 'id': u'0306_000 - ADQUISICIONES Y CONTRATACIONES', 'jurisdiccion': None, 'localidad': u'SAN TELMO - CIUDAD DE BUENOS AIRES - Argentina', 'pertenece_spn': False, 'serv_adm_financiero': u'PROGRAMA DE SERVICIOS AGR\xcdCOLAS PROVINCIALES', 'subjurisdiccion': None, 'tel': u'43494656', 'unidad_op_compra': u'0306_000 - ADQUISICIONES Y CONTRATACIONES'}, {'direccion': u'ALICIAMOREAUDEJUSTO240', 'email': u'*****@*****.**', 'id': u'0146_000 - GCIA. DE ADMINISTRACI\xd3N Y ABASTECIMIENTO', 'jurisdiccion': None, 'localidad': u'PUERTO MADERO - CIUDAD DE BUENOS AIRES - Argentina', 'pertenece_spn': False, 'serv_adm_financiero': u'CAMUZZI GAS PAMPEANA S.A.', 'subjurisdiccion': None, 'tel': u'01157767000', 'unidad_op_compra': u'0146_000 - GCIA. DE ADMINISTRACI\xd3N Y ABASTECIMIENTO'}, {'direccion': u'25DEMAYO489', 'email': u'*****@*****.**', 'id': u'0191_000 - ABASTECIMIENTO', 'jurisdiccion': None, 'localidad': u'SAN NICOLAS - CIUDAD DE BUENOS AIRES - Argentina', 'pertenece_spn': False, 'serv_adm_financiero': u'INTEGRACI\xd3N EL\xc9CTRICA SUR ARGENTINA S.A.', 'subjurisdiccion': None, 'tel': u'03515263100', 'unidad_op_compra': u'0191_000 - ABASTECIMIENTO'}, {'direccion': u'AVDA.INDEPENDENCIAN\xba1800', 'email': u'*****@*****.**', 'id': u'0102_001 - FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGIA', 'jurisdiccion': u'70-MINISTERIO DE EDUCACION', 'localidad': u'SAN MIGUEL DE TUCUMAN - TUCUMAN - Argentina', 'pertenece_spn': True, 'serv_adm_financiero': u'836-UNIVERSIDAD NACIONAL DE TUCUMAN ', 'subjurisdiccion': u'00-MINISTERIO DE EDUCACION', 'tel': u'3814107585INTERNO7585', 'unidad_op_compra': u'0102_001 - FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGIA'}, {'direccion': u'AVENIDAROSALESN\xba597', 'email': u'*****@*****.**', 'id': u'0040_031 - DIRECCION DE INFRAESTRUCTURA', 'jurisdiccion': u'45-MINISTERIO DE DEFENSA', 'localidad': u'EL PALOMAR - BUENOS AIRES - Argentina', 'pertenece_spn': True, 'serv_adm_financiero': u'381-FUERZA AEREA ARGENTINA', 'subjurisdiccion': u'23-ESTADO MAYOR GENERAL DE LA FUERZA AEREA', 'tel': u'01147519568', 'unidad_op_compra': u'0040_031 - DIRECCION DE INFRAESTRUCTURA'} ] self.assertEqual(len(results), len(expected_results)) for (r,er) in zip(results, expected_results) : self.assertEqual(r, er)