Formatear el resultado de response.css de scrapy spider – python django scrapy

Pregunta:


Cuando ejecuto mi spider el valor que deseo obtener los guardo en un diccionario, pero quiero también crear una carpeta con el nombre de uno de los resultados

def parse(self, response):

    ml_item = ScrapyItem()
    mt_item = ScrapyItem()

    mt_item['title'] = response.css('div.info h1::text').extract()
    mt_item['Parodies'] = response.css('span.characters 

    name = str(mt_item['title'])
    os.mkdir(name)

El problema es que se guarda como [u"Winter's Tale"].

¿ Cómo puedo formatearlo sacar solo las palabras ?

Preguntado por: valentin rodriguez

Respuesta Patricio Moracho:

Te adjunto una rutina que uso en estos casos, funciona con cadenas unicode y limpia varios caracteres no compatibles con los sistemas de archivo.

import re

from unicodedata import normalize

_punct_re = re.compile(r'[t !"#$%&'()*-/<=>[email protected][\]^_`{|},.:]+')

def normalize_filename(text, delim='-'):
    """Normaliza una cadena para ser usada como nombre de archivo.

    Args:
        text (str): String a normalizar
        delim (str): Caracter de reemplazo de aquellos no válidos

    Ejemplo:
        >>> normalize_filename(u"Esto, no es válido como nombre de Archivo!", "-")
        'esto-no-es-valido-como-nombre-de-archivo'
    """
    result = []
    for word in _punct_re.split(text.lower()):
        word = normalize('NFKD', word).encode('ascii', 'ignore')
        word = word.decode('utf-8')
        if word:
            result.append(word)
    return delim.join(result)

En _punct_re definimos la expresión regular de los caracteres que vamos a limpiar, que en realidad se consideran separadores y los terminamos completando con el valor del parámetro delim

Ejemplo:

print(normalize_filename(u"Esto, no es válido como nombre de Archivo!", "-"))
print(normalize_filename("Tampoco?funionaría esto? eh!!!!", "-"))

La salida:

esto-no-es-valido-como-nombre-de-archivo
tampoco-funionaria-esto-eh

Fuente

Related Posts:

Python editor extension for laravel-admin
...
DreamFactory(tm) Scripting Components
...
Enhance PHP sprintf with Python-style named parameters
...
Python string slices in PHP
...
Non-standard PHP library (NSPL) – functional primitives toolbox and more
...
PHP client for Celery task queue
...
File Upload widget for jQuery.
...
Con Django ‘str’ object is not callable en class based-views – python django
Pregunta: Tengo este problema cuando quiero acceder a una URL que me dice que es str object is no callable seguramente tengo algo mal en ...
Abrir páginas web en python 3.5.X en la misma ventana – python python-3.x webbrowser
Pregunta: Buenas, he hecho un script para lanzar varias páginas web en una sola ventana, es decir, cada url en una pestaña sin embargo, firefox ...
Publicar proyecto en Python 3.5 con heroku – python django python-3.x
Pregunta: Hola tengo un proyecto hecho con Python 3.5 y Django 1.10 y quisiera publicarlo en HEROKU pero veo que solo soporta Python 2.7, ¿alguien ...
¿Porqué me sale error csrf verification failed? – django
Pregunta: Esta es mi vista: def validarcelda(request): error = '' success = False if request.method == 'POST': ...
Correcto uso de la app admin de django – python django
Pregunta: Cual es el correcto uso que se le debe dar a la página de administración (django.contrib.admin) en una aplicación en producción. explico mi pregunta. El ...
Cambiar un valor string a un entero – python django ajax
Pregunta: Con el siguiente código quiero hacer una validación donde valide si un dato que voy a ingresar es mayor a otro que ya tengo, ...
Como correr Django en python 3.5 – python python-3.x django
Pregunta: estoy trabajando con Django en python 2.7, para eso hago uso de virtualenv, pip, el conector de mysql, etc. Tengo predefinido python 3.5 en ...
Insertar salto de línea escribiendo en un txt (Python) – python tkinter
Pregunta: Como puedo insertar un salto de línea : archi.write(svnombreRP.get()) Lo hago de la siguientes maneras y no me funciona: No funciona archi.write(svnombreRP.get()'/n') No funciona archi.write(svnombreRP.get()/n) No funciona, me imprime la variable ...

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *