Scrapy rastejando da estação e os dados armazenados no arquivo de banco de dados e

  • scrapy cinco componentes principais Introdução

    • Engine (Scrapy)

      • Para o processamento de todo o sistema de processamento de fluxo de dados, provocando transação (Framework Core)

    • O programador (Scheduler)

      • Motor enviou-me a aceitar o pedido, pressionado na fila e voltar novamente quando as solicitações do motor pode ser pensado como um URL (ou rastreamento URL da página é um link) fila de prioridade, o que tem de ser decidido na próxima o que crawl URLs que, enquanto a remoção de URLs duplicados
    • Downloader (Downloader)

      • Para fazer download de conteúdo web e conteúdo web voltou para a aranha (Scrapy Downloader é baseado em torcido este modelo assíncrono eficaz)
    • Réptil (aranhas)

      • Réptil é o trabalho principal é usada para extrair as informações que eles precisam de uma página web em particular, o chamado entidade (ponto). Os usuários também podem extrair o link, vamos Scrapy continuar a rastejar para a próxima página
    • pipeline de projetos (Pipeline)

      • Responsável pelo tratamento de répteis extraídas da entidade Web, a principal função é entidade persistente, para verificar a eficácia da entidade, remover informações desnecessárias. Quando uma página é analisado rastreador, o tubo será enviado para o projeto, e depois de uma ordem específica poucos de processamento de dados

Os dados da estação rastejantes

A maioria dos sites exibir dados Operações de paginação são realizadas, em seguida, todos os números de página de dados página correspondente está rastejando todo os dados da estação do rastreamento réptil.

Scrapy rastreamento com base em quão cheio dados que a estação?

pedido de abertura solicitação usando o método manual.

Requisitos: The Encyclopedia of embaraços todas as páginas do autor eo pedaço de dados de conteúdo rastejando corte de armazenamento persistente

arquivo de aranha:

classe QiubaiSpider (scrapy.Spider): 
    nome = ' Qiubai '   # nome do aplicativo (identificador único) 
    # permitindo o rastreamento de domínio (se o domínio encontra um não-url não está rastreando dados) 
    allowed_domains = [ ' https: // www.qiushibaike.com/ ' ]
     # url começando rastejar 
    start_urls = [ ' https://www.qiushibaike.com/text ' ] 

    # rastejando várias páginas 
    pagenum. 1 =   # a partir da página 
    # sistema com url template (imutável) 
    URL = ' https://www.qiushibaike.com/text/page/%s/ '   # por página URL 

    #Acesse o URL de início e a função de retorno adquire resultado, a resposta é uma função dos parâmetros do pedido de transmissão inicial para a url adquire o objeto de resposta. A função retorna os iterables valor deve ou NULL 
    DEF o parse (Self, resposta) :
         # impressão (response.text) # buscar resposta tipo de conteúdo corda 
        # Pega o nome eo conteúdo do 
        # # respectivo tipo de conteúdo byte adquiriu impressão (response.body) 
        # método XPath para a resposta pode ser XPath expressão ele atua diretamente sobre a função 
        odiv response.xpath = ( ' // div [@ class = "col1-Old-style col1"] / div ' )
         # impressão (len (odiv)) 
        CONTENT_LIST = []   # para armazenar analisado dados 
        para div_item em odiv:
             # lista de funções XPath dados, a lista é armazenada nos tipos Selector retorno de dados. 
            #Nós resolvido o conteúdo é encapsulado no objeto Selector, chamar a função extracto () analisa o conteúdo foi removido do Selecor. 
            = Div_item.xpath autor ( ' .// div [. 1] / A [2] / H2 / text () | .// div [. 1] / span / H2 / text () ' ) [0] .extract () 
            conteúdo = div_item.xpath ( ' .// div [@ class = "Content"] / span / text () ' ) .extract () 
            Content = '' .join (conteúdo)   # listando em uma corda 
            # impressões impressão crawl levar os dados 
            # impressão (autor, Content) 
            # impressão (conteúdo) 
            author = author.strip ( ' \ n- ' )   # filtrada linha em branco 
            content = content.strip (' \ N ' )
             # analisado pacote de dados para a itens sujeitos 
            item = FirstbloodItem () 
            Item [ ' autor ' ] = autor 
            Item [ ' Content ' ] = conteúdo
             de impressão (autor) 

            o rendimento item   # Item para submissões conduta ( pipelines.py) 

        # rastejando página de dados 
        de impressão ( ' pagenum = {} ' .format (self.pageNum))
         IF self.pageNum <5:.   # total de rastejar 13 (de 13) 
            . self.pageNum + 1 =
            NEW_URL = o formato (self.url% self.pageNum)
             Imprimir (NEW_URL)
             # recursiva rastreamento de dados: callback callback parâmetro de valor (após a url pedido, os dados correspondentes obtidos continua de análise sintática), chamadas recursivas função de análise 
            # em scrapy.Request () irá dont_filter = True conjunto de parâmetros para Verdadeiro, de modo que os pedidos não são filtrados: 
            o rendimento scrapy.http.Request (URL = NEW_URL, a chamada de retorno = self.parse, dont_filter = TRUE)

arquivo items.py

importação scrapy 


classe FirstbloodItem (scrapy.Item):
     # definir os campos para o produto aqui como: 
    # scrapy.Field () name = 
    autor = scrapy.Field () 
    conteúdo = scrapy.Field ()
     passe

arquivo de gasoduto

Import pymysql
 classe FirstbloodPipeline (Object):
     # construtor 
    DEF  o __init__ (self): 
        self.fp = Nenhum   # definir um atributo descritor 

    # seguir estão no processo de reescrever a classe pai: 
    # começando répteis realizada uma vez 
    DEF open_spider (Self, Spider):
         Imprimir ( ' crawlers começar ' ) 
        self.fp (= Abrir ' ./data.txt ' , ' W ' , codificando = 'UTF-8 ' )
     # tratam especificamente item de destino #
    Como esse método é invocado repetidamente executado, o arquivo aberto e operações próximos escritas no outros dois vão cada executar um método. 
    DEF process_item (self, item, Spider): 
        autor = Item [ ' autor ' ] 
        Conteúdo = item [ ' conteúdo ' ] 
        Contents = ' {}: {} \ n- \ n- ' .format (autor, Content) 
        self.fp. write (Conteúdo) 
        de retorno do item   # passou para a próxima aula é executado duto 

    DEF close_spider (Self, Spider):
         Imprimir ( ' crawlers end ' ) 
        self.fp.close () 

# um canal arquivos de classe tubo correspondente está falando para uma plataforma de armazenamento-de dados
# Submissão item rastreador só será executado o arquivo aceitos classe primeiro canal na tubulação 
# process_item representa o item de retorno é transmitido para o próximo item a ser realizada Pipeline 
# dados armazenados no banco de dados 
de classe mysqlPipeline (Object):
     # construtores 
    def  o __init__ (self): 
        self.conn = Nenhum   # definir um atributo descritor 
        self.cursor = Nenhum 
        self.num = 0 

    # a seguir estão no processo de reescrever a classe pai: 
    # começando répteis realizada uma vez 
    def open_spider (Self, Spider): 
        self.conn = pymysql.Connect (= Anfitrião ' 192.168.31.xx ' , Port = 3306, = Usuário ' raiz ', Password = ' 111 ' , DB = 'XXX _db ' , charset = ' UTF-8 ' )
         para impressão ( ' banco de dados rastreador Iniciar ' ) 

    # tratam especificamente item de destino 
    # porque o método invocado será executado várias vezes, a abertura e fechamento de arquivos operação de gravação nos outros dois terão, cada executar um método. 
    DEF process_item (self, item, Spider): 
        autor = Item [ ' autor ' ] 
        Conteúdo = Item [ ' Content ' ] 
        self.cursor = self.conn.cursor ()
         o try :

            self.cursor.execute ( ' insert em valores Qiubai (% s,% s) ' , (autor, conteúdo)) 
            self.conn.commit () 
        , exceto Exceção como e:
             print (e) 
            self.conn.rollback () 
        retorno artigo 

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

configuração

= USER_AGENT ' Mozilla / 5.0 (Macintosh; Intel Mac OS X-10_12_0) AppleWebKit / 537,36 (KHTML, como Gecko) Chrome / 68.0.3440.106 Safari / 537,36 '   # disfarçar a identidade da solicitação transportadora 
# Obey um robots.txt governa 
# ROBOTSTXT_OBEY = True 
ROBOTSTXT_OBEY = falsa   # insignificante ou não conformidade com os robôs protocolo 
# exibição somente o tipo especificado de informações de log 
, log_level, = ' ERRO ' 
# os pedidos Configurar máximas concorrente realizada por Scrapy (padrão: 16) 
# CONCURRENT_REQUESTS = 32 



# Configurar Dutos item 
# Veja HTTPS: // DOC .scrapy.org / EN / Latest / Tópicos / item-pipeline.html 
ITEM_PIPELINES = {
   ' FirstBlood.pipelines.FirstbloodPipeline ' : 300 ,
     ' firstBlood.pipelines.mysqlPipeline ' : 320. , 

    # 300 indica a prioridade, maior a menor 
}

Acho que você gosta

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