Estoy tratando de almacenar mis datos raspados con scrapy en una base de datos SQL, pero mi código no envía nada mientras no se menciona ningún error cuando se ejecuta.

Estoy usando mi conector sql ya que no logro instalar MySQL-python. Mi base de datos SQL parece funcionar bien y cuando ejecuto el código aumenta el tráfico KB / s. A continuación encontrará mi código pipelines.py.

import mysql.connector
from mysql.connector import errorcode

class CleaningPipeline(object):
    ...

class DatabasePipeline(object):

    def _init_(self):
        self.create_connection()
        self.create_table()

    def create_connection(self):
        self.conn = mysql.connector.connect(
            host = 'localhost',
            user = 'root',
            passwd = '********',
            database = 'lecturesinparis_db'
        )
        self.curr = self.conn.cursor()

    def create_table(self):
        self.curr.execute("""DROP TABLE IF EXISTS mdl""")
        self.curr.execute("""create table mdl(
                        title text,
                        location text,
                        startdatetime text,
                        lenght text,
                        description text,
                        )""")

    def process_item(self, item, spider):
        self.store_db(item)
        return item

    def store_db(self, item):
        self.curr.execute("""insert into mdl values (%s,%s,%s,%s,%s)""", (
            item['title'][0],
            item['location'][0],
            item['startdatetime'][0],
            item['lenght'][0],
            item['description'][0],
        ))
        self.conn.commit()
1
edleciel 19 oct. 2019 a las 19:32

1 respuesta

La mejor respuesta

Primero debe agregar la clase en ITEM_PIPELINES para informarle a Scrapy que deseo usar esta canalización.

En su archivo settings.py, actualice las líneas a continuación con su nombre de clase de la siguiente manera.

# https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'projectname.pipelines.CleaningPipeline': 700,
    'projectname.pipelines.DatabasePipeline': 800,
}

Los números 700 y 800 muestran en qué orden las tuberías procesarán los datos, puede ser cualquier número entero entre 1-1000. Las tuberías procesarán los artículos en el orden basado en este número, por lo que la tubería con 700 procesará los datos antes de la tubería con 800.

Nota : Reemplace el nombre del proyecto en 'projectname.pipelines.CleaningPipeline' con su nombre de proyecto real.

4
Ahsan Roy 21 oct. 2019 a las 01:42