Scrapy rastreo de la estación y los datos almacenados en el archivo de base de datos, y

  • scrapy cinco componentes básicos Introducción

    • Motor (Scrapy)

      • Para el procesamiento de todo el sistema de procesamiento de flujo de datos, lo que provocó la transacción (Marco de base)

    • El planificador (Scheduler)

      • Motor me envió a aceptar la solicitud, presionado en la cola y volver de nuevo cuando las peticiones del motor pueden ser considerados como una dirección URL (o dirección URL de la página de rastreo es un enlace) cola de prioridad, que ha de ser decidido próximo lo que hay que rastrear las URL que mientras que la eliminación de URL duplicadas
    • Downloader (Descargador)

      • Para la descarga de contenido web y el contenido web vuelto a la araña (Scrapy Downloader se basa en este modelo asíncrono torcido efectiva)
    • Reptil (arañas)

      • Reptil es el trabajo principal se utiliza para extraer la información que necesitan de una página web en particular, la entidad llamada (artículo). Los usuarios también pueden extraer el enlace, permiten Scrapy continuará rastreando a la página siguiente
    • cartera de proyectos (Pipeline)

      • Responsable del manejo de reptiles procedentes de la entidad Web, la función principal es la entidad persistente, para verificar la eficacia de la entidad, eliminar información innecesaria. Cuando una página se analiza rastreador, la tubería será enviado al proyecto, y después de un orden específico pocos de procesamiento de datos

Los datos de la estación que se arrastran

La mayoría de los sitios muestran datos operaciones de paginación se llevan a cabo, entonces todos los números de página de datos de página correspondiente se está arrastrando todos los datos de la estación en el rastreo reptil.

Scrapy rastreo basado en la forma completa de la estación de datos que?

Solicitud solicitud de inicio utilizando el método manual.

Requisitos: La Enciclopedia de vergüenzas todas las páginas del autor y la pieza de datos de contenido que se arrastra corte almacenamiento persistente

archivo de araña:

clase QiubaiSpider (scrapy.Spider): 
    nombre = ' Qiubai '   # nombre de la aplicación (identificador único) 
    # permitir el rastreo de dominio (si el dominio se encuentra con un no-url no es el rastreo de datos) 
    allowed_domains = [ ' HTTPS: // www.qiushibaike.com/ ' ]
     # URL que comienza el rastreo 
    start_urls = [ ' https://www.qiushibaike.com/text ' ] 

    # arrastrándose varias páginas 
    pagenum. 1 =   # de comenzar la página 
    # sistema con url plantilla (inmutable) 
    URL = ' https://www.qiushibaike.com/text/page/%s/ '   # por página URL 

    #Acceso a la URL de inicio y la función de devolución de llamada adquiere consecuencia, la respuesta está en función de los parámetros de la petición de transmisión inicial a la url adquiere el objeto respuesta. La función devuelve el valor debe iterables o NULL 
    DEF el análisis sintáctico (Ser, la respuesta) :
         # de impresión (response.text) # traiga respuesta de tipo contenido de la cadena 
        # Obtener el nombre y el contenido de 
        # # respectivo tipo de contenido bytes adquirida impresión (response.body) 
        # método de XPath para la respuesta puede ser la expresión XPath actúa directamente sobre la función 
        odiv response.xpath = ( ' // div [@ class = "col1-viejo estilo col1"] / div ' )
         # impresión (len (odiv)) 
        CONTENT_LIST = []   # para almacenar analizado los datos 
        para div_item en odiv:
             # lista de funciones XPath de datos, la lista se almacena en los tipos de selectores de retorno de datos. 
            #Se resolvieron el contenido está encapsulado en el objeto de selección, llamar a la función extracto () analiza el contenido se retiró del Selecor. 
            = Div_item.xpath autor ( ' .// div [. 1] / A [2] / H2 / texto () | .// div [. 1] / span / H2 / texto () ' ) [0] .extract () 
            contenido = div_item.xpath ( ' .// div [@ class = "contenido"] / span / texto () ' ) .extract () 
            contenido = '' .join (contenido)   # lista en una cadena 
            # impresiones impresión rastreo tomar datos 
            # impresión (autor, contenido) 
            # impresión (contenido) 
            autor = author.strip ( ' \ n ' )   # filtrada línea en blanco 
            content = content.strip (' \ N- ' )
             # analizado datos paquete a la artículos sujeto 
            artículo = FirstbloodItem () 
            del artículo [ ' autor ' ] = autor 
            del artículo [ ' contenido ' ] = contenido
             de impresión (autor) 

            el rendimiento del artículo   # de artículo para presentaciones conducto ( pipelines.py) 

        # arrastra todo página de datos 
        de impresión ( ' pagenum = {} ' .formato (self.pageNum))
         SI self.pageNum <5:.   # rastreo total de 13 (de 13) 
            . self.pageNum + 1 =
            NEW_URL = el formato (self.url% self.pageNum)
             Imprimir (NEW_URL)
             # recursiva rastreo de datos: devolución de llamada de devolución de llamada parámetro de valor (después de la petición de URL, los datos correspondientes obtenidos de análisis de análisis sigue), las llamadas recursivas función de análisis 
            # en scrapy.Request () función dont_filter = parámetro conjunto verdadero a verdadero, de modo que las solicitudes no se filtran: 
            el rendimiento scrapy.http.Request (URL = NEW_URL, la devolución de llamada = self.parse, dont_filter = True)

archivo items.py

importación scrapy 


clase FirstbloodItem (scrapy.Item):
     # definen los campos para su artículo aquí como: 
    # name = scrapy.Field () 
    autor = scrapy.Field () 
    contenidos = scrapy.Field ()
     pase

archivo de tuberías

Importación pymysql
 clase FirstbloodPipeline (Objeto):
     # constructor 
    DEF  la __init__ (Ser): 
        self.fp = Ninguno   # definir un atributo descriptor 

    # siguientes están en proceso de reescribir la clase padre: 
    # comenzando reptiles realizan una vez 
    DEF open_spider (Ser, araña):
         Imprimir ( ' rastreadores comienzan ' ) 
        self.fp (= Abrir ' ./data.txt ' , ' W ' , que codifican = 'UTF-8 ' )
     # refieren específicamente elemento de destino #
    Debido a que este método se invoca ejecuta repetidamente, el archivo abrir y cerrar operaciones escritas en los otros dos cada uno realizar un método. 
    DEF process_item (Ser, artículo, Spider): 
        autor = Punto [ ' autor ' ] 
        Contenido = item [ ' contenido ' ] 
        Contenido = ' {} {}: \ n \ n ' .formato (autor, contenido) 
        self.fp. Write (Contenido) 
        de retorno de artículos   # pasó a la siguiente clase se ejecuta conducto 

    DEF close_spider (Ser, araña):
         Imprimir ( ' rastreadores end ' ) 
        self.fp.close () 

# un conducto archivos de clase de tubería correspondiente está hablando a una plataforma de almacenamiento de datos,
# Presentación de artículos rastreador sólo se ejecuta el archivo de clase aceptado primer conducto en la tubería 
# process_item representa el artículo de vuelta se transmite al siguiente elemento a realizar Pipeline 
# datos almacenados en la base de datos 
de clase mysqlPipeline (Objeto):
     # constructores 
    def  el __init__ (Ser): 
        self.conn = Ninguno   # definir un atributo descriptor 
        self.cursor = Ninguno 
        self.num = 0 

    # a continuación se presentan en el proceso de reescribir la clase padre: 
    # comenzando reptiles realizan una vez 
    def open_spider (Ser, araña): 
        self.conn = pymysql.Connect (= Host ' 192.168.31.xx ' , Puerto = 3306, = usuario ' la raíz ', Password = ' 111 ' , PM = 'XXX _db ' , charset = ' UTF-8 ' )
         Imprimir ( ' base de datos de rastreador de inicio ' ) 

    # refieren específicamente elemento de destino 
    # porque el método invocado será ejecutado varias veces, la apertura y cierre de archivos operación de escritura en los otros dos cada uno realizar un método. 
    DEF process_item (Ser, artículo, Spider): 
        autor = Punto [ ' autor ' ] 
        Contenido = Punto [ ' contenido ' ] 
        self.cursor = self.conn.cursor ()
         el try :

            self.cursor.execute ( ' inserción en valores Qiubai (% s,% s) ' , (autor, contenido)) 
            self.conn.commit () 
        excepto Excepción como e:
             impresión (e) 
            self.conn.rollback () 
        de retorno elemento 

    def close_spider (auto, araña):
         print ( ' 爬虫数据库结束' ) 
        self.cursor.close () 
        self.conn.close ()

ajuste

= USER_AGENT ' Mozilla / 5.0 (Macintosh; Intel Mac OS X-10_12_0) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 68.0.3440.106 Safari / 537.36 '   # disfrazar la identidad de la solicitud portadora 
# obedecer a un robots.txt gobierna 
# ROBOTSTXT_OBEY = True 
ROBOTSTXT_OBEY = falso   # insignificante o no cumplimiento con los robots de protocolo 
# pantalla sólo el tipo especificado de la información de registro 
, LOG_LEVEL, = ' ERROR ' 
# las solicitudes Configurar máximos concurrentes realizadas por Scrapy (por defecto: 16) 
# CONCURRENT_REQUESTS = 32 



# los Configure Tuberías artículo 
# Ver HTTPS: // DOC .scrapy.org / ES / Tarde / Temas / Tema-pipeline.html 
ITEM_PIPELINES = {
   ' FirstBlood.pipelines.FirstbloodPipeline ' : 300 ,
     ' firstBlood.pipelines.mysqlPipeline ' : 320. , 

    # 300 indica la prioridad, más alta es la más pequeña 
}

Supongo que te gusta

Origin www.cnblogs.com/xiao-apple36/p/12617046.html
Recomendado
Clasificación