Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Usar Item Loaders #19

Closed
matiskay opened this issue Aug 11, 2015 · 10 comments
Closed

Usar Item Loaders #19

matiskay opened this issue Aug 11, 2015 · 10 comments

Comments

@matiskay
Copy link
Contributor

Si usamos Items Loaders en los items podemos reducir la cantidad de codigo necesario para la Spider y podemos aprovechar las funciones para limpieza de datos.

Item Loaders provide a convenient mechanism for populating scraped Items. 
Even though Items can be populated using their own dictionary-like API,
Item Loaders provide a much more convenient API for populating them 
from a scraping process, by automating some common tasks like parsing 
the raw extracted data before assigning it.
@matiskay
Copy link
Contributor Author

Documentar el proceso de limpieza de datos para esto investigar todas las tareas de limpieza que se hacen en las spiders y en los pipelines.

@matiskay
Copy link
Contributor Author

Pipelines

  • Trimming and Spaces cleaning.
        for k, v in item.items():
            if isinstance(v, basestring) is True:
                value = re.sub('\s+', ' ', v)
                item[k] = value.strip()
            else:
                item[k] = v
  • Date can be and object or a string formatted like %Y-%m-%d
        try:
            item['date'] = datetime.date.strftime(item['date'], '%Y-%m-%d')
        except TypeError:
            # our date is good, continue
            pass
  • Set the other item keys to empty string ''.
  • Drop Items without full_name.
  • If date_start has 'HORA DE then drop the item.

Spiders

  • All the spiders extract and get the first element of the xpath.
item['host_name'] = data[7].xpath('./span/text()').extract()[0].strip()
item['full_name'] = fields[1].xpath('text()').extract_first().strip()
  • Some spider also strip the item data.
item['host_name'] = data[7].xpath('./span/text()').extract()[0].strip()
item['full_name'] = fields[1].xpath('text()').extract_first().strip()

@matiskay
Copy link
Contributor Author

                item = make_hash(item)

Puede ser usado en su propio pipeline.

@matiskay
Copy link
Contributor Author

@aniversarioperu, las primeras spiders con item loaders estan en el pull request #26. Por ahora las otras spiders pueden quedaran con el metodo antiguo hasta que encontremos una forma de hacer tests y validacion de datos en las spiders #24

@aniversarioperu
Copy link
Member

buena, el uso de item loaders es recomendado por la gente de Scrapy.

@aniversarioperu
Copy link
Member

pero ahora tenemos el problema que se están generando duplicados. Mirá:
http://manolo.rocks/search/?q=47344647

algún campo debe haber cambiado que ahora el hash sale diferente y al scrapear 2 veces los mismos registros se han guardado en la base de datos. Antes no pasaba eso.

me parece que problema está aqui https://github.com/aniversarioperu/manolo_scraper/blob/master/manolo_scraper/manolo_scraper/spiders/congreso.py#L67

la fecha debe ser string YYYY-MM-DD

@matiskay
Copy link
Contributor Author

Voy a revisar cual puede ser el problema.

On Wednesday, August 19, 2015, AniversarioPeru notifications@github.com
wrote:

pero ahora tenemos el problema que se están generando duplicados. Mirá:
http://manolo.rocks/search/?q=47344647

algún campo debe haber cambiado que ahora el hash sale diferente y al
scrapear 2 veces los mismos registros se han guardado en la base de datos.
Antes no pasaba eso.

me parece que problema está aqui
https://github.com/aniversarioperu/manolo_scraper/blob/master/manolo_scraper/manolo_scraper/spiders/congreso.py#L67

la fecha debe ser string YYYY-MM-DD


Reply to this email directly or view it on GitHub
#19 (comment)
.

@matiskay
Copy link
Contributor Author

@aniversarioperu, el problema es que los item loaders hacen las tranformaciones de los datos antes de pasar por el hash. Antes, se pasaba el hash primero y luego el item loaders. Es posible rescrapear todo y tener una base de datos Limpia desde el comienzo. Eso es lo que estaba pensando para un proximo cambio en Manolo. Hay que seguir trabajando en los cambios y luego volver a rescrapear todo para tener los datos consitentes y los hashes como deben ser.

@matiskay
Copy link
Contributor Author

@aniversarioperu, we are using Item Loaders everywhere now :D.

Note: TCSpider doesn't count as a spider.

@matiskay
Copy link
Contributor Author

closed #19

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants