Lo primero es saber que es lo que quieres, si la información gráfica o al alfanumérica. Suponiendo que sea esto último, se puede bajar legalmente municipio a municipio con certificado digital.
Sede Electrónica del Catastro --> Descarga de datos y cartografía por municipio --> Descarga de información alfanumérica (formato CAT).
A partir de aquí, que ya tendrás los datos en bruto del Catastro, de nuevo hay que saber que quieres, y transformar de ese formato a algo usable. En el .CAT está todo, parcelación, rusticas, solares, urbanas, etc..
Yo solo me suelo quedar con las fincas urbanas, es decir, los bienes inmuebles (tipo 15) así que filtro a ese tipo de registros. Para poder leer el archivo y traducirlo a algo usable, necesitas la guía de dicho formato dado que viene como campos de ancho fijo y hace falta tener previamente la estructura. El catastro proporciona una plantilla en Excel a tal fin pero es una autentica mierda infumable y en cuanto el municipio sea medio grande no puede con ello y se cuelga, además de que el resultado deja mucho que desear. Mi recomendación es programarse un parser a tal efecto propio, cosa que es sencilla.
La especificación del formato .CAT la tienes disponible en:
http://www.catastro.meh.es/pdf/formatos_intercambio/catastro_fin_cat_2006.pdf
Te dejo aquí la estructura de archivo que uso yo, restringido a los campos que a mi me interesan, previo filtro para extraer solo bienes inmuebles (registros tipo 15):
struct = [
[24, 2, 'N', 'codigo_delegacion_meh'],
[26, 3, 'N', 'codigo_municipio_dgc'],
[29, 2, 'X', 'clase_bien_inmueble'],
[31, 14, 'X', 'parcela_catastral'],
[45, 4, 'N', 'numero_secuencia_en_parcela'],
[49, 1, 'X', 'primer_caracter_control'],
[50, 1, 'X', 'segundo_caracter_control'],
[51, 8, 'N', 'numero_fijo_bien_inmueble'],
[59, 15, 'X', 'identificacion_inmueble_segun_ayuntamiento'],
[74, 19, 'X', 'numero_finca_registral'],
[93, 2, 'N', 'codigo_provincia_ine'],
[95, 25, 'X', 'nombre_provincia'],
[120, 3, 'N', 'codigo_municipio_dgc_2'],
[123, 3, 'N', 'codigo_municipio_ine'],
[126, 40, 'X', 'nombre_municipio'],
[166, 30, 'X', 'nombre_entidad_menor'],
[196, 5, 'N', 'codigo_via_publica_dgc'],
[201, 5, 'X', 'tipo_via'],
[206, 25, 'X', 'nombre_via'],
[231, 4, 'N', 'primer_numero_policia'],
[235, 1, 'X', 'primera_letra'],
[236, 4, 'N', 'segundo_numero_policia'],
[240, 1, 'X', 'segunda_letra'],
[241, 5, 'N', 'kilometro_por_cien'],
[246, 4, 'X', 'bloque'],
[250, 2, 'X', 'escalera'],
[252, 3, 'X', 'planta'],
[255, 3, 'X', 'puerta'],
[258, 25, 'X', 'direccion_no_estructurada'],
[283, 5, 'N', 'codigo_postal'],
[288, 2, 'X', 'distrito_municipal'],
[290, 3, 'N', 'codigo_municipio_origen_caso_agregacion_dgc'],
[293, 2, 'N', 'codigo_zona_concentracion'],
[295, 3, 'N', 'codigo_poligono'],
[298, 5, 'N', 'codigo_parcela'],
[303, 5, 'X', 'codigo_paraje_dgc'],
[308, 30, 'X', 'nombre_paraje'],
[368, 4, 'X', 'numero_orden_inmueble_en_escritura'],
[372, 4, 'N', 'anyo_antiguedad_inmueble'],
[428, 1, 'X', 'clave_uso'], # Ver cod_usos.csv
[442, 10, 'N', 'superficie_construida_m2'],
[452, 10, 'N', 'superficie_asociada_m2'],
[462, 9, 'N', 'coeficiente_propiedad_en_cienmillonesimas_partes']
]
Espero que te sirva de ayuda.
P.D: te contesto en público en vez de en privado por si se diera el caso de que pudiera ser de ayuda a más gente. Cualquier cosa a más, contáctame por privado.