Tutorial introdutório do rastreador Python Compactação, compactação ou ** compactação distribuídas em Python

Adquira o hábito de escrever juntos! Este é o 8º dia da minha participação no "Nuggets Daily New Plan · April Update Challenge", clique para ver os detalhes do evento .

escreva na frente

Para o aprendizado de rastreador distribuído ou para o aprendizado técnico, não há atalhos. Há dois caminhos a seguir. Primeiro, você pode praticar repetidamente e pode fazer a perfeição; segundo, observe o código compartilhado por outras pessoas e aprenda o método de escrita de outras pessoas repetidamente até que você faça você mesmo.

No último blog, acredito que você pode executar facilmente o rastreador distribuído. Você pode achar que o rastreador distribuído é um ajuste de pensamento. Não há muitas mudanças na escrita do código, mas você deve saber que usamos scrapy- O rastreador distribuído rastreador construído diretamente pelo redis é equivalente a ficar sobre os ombros dos antecessores e escalar a parede distribuída, mas como o primeiro passo da "construção" para entender o rastreador distribuído, alcançamos esse marco e, em seguida, faremos isso Os marcos são mais compactados para facilitar a escalada posterior.

Em seguida, usarei cerca de 3 casos e continuarei repetindo o método de escrita do rastreador distribuído até que não haja truque.

Encontre um site para referência hoje 人人都是产品经理, faça uma declaração 不好意思,学习目的,爬来的数据会及时的删除滴.

Crie um rastreador distribuído

Criar um projeto de rastreador fragmentado

scrapy.exe startproject woshipm

Crie um projeto de rastreador por meio do comando acima. Observe que, se seu scrapy.exe não estiver configurado com variáveis ​​de ambiente, localize scrapy.exe no caminho completo e execute o comando

Crie CrawlSpiderum

D:\python100\venv\Scripts\scrapy.exe genspider -t crawl pm xxx.com

Ao criar um arquivo crawler através do comando acima, deve-se atentar para a inserção da pasta spider no projeto crawler, caso contrário, é necessário copiar o pm.pyarquivo e colá-lo na pasta spider.

As duas etapas acima foram implementadas e a estrutura de diretórios atual é a seguinte

Tutorial introdutório do rastreador Python 74-100 Compactação, compactação ou ** compactação distribuída do Python

Modifique o arquivo pm.py para o conteúdo básico do rastreador distribuído

Os resultados finais da modificação são os seguintes, preste atenção ao conteúdo dos comentários

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider # 导入scrapy_redis

class PmSpider(RedisCrawlSpider):  # 修改父类
    name = 'pm'
    # 注释以下两条内容
    # allowed_domains = ['xxx.com']
    # start_urls = ['http://xxx.com/']

    rules = (
        Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
    )
    redis_key = 'pm_url'  # 新增加一个redis_key 名称可以随意
    def parse_item(self, response):
        item = {}
        #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
        #item['name'] = response.xpath('//div[@id="name"]').get()
        #item['description'] = response.xpath('//div[@id="description"]').get()
        return item
复制代码

Modifique o arquivo setting.py para adicionar a parte redis

O resultado final da modificação é o seguinte

BOT_NAME = 'woshipm'
SPIDER_MODULES = ['woshipm.spiders']
NEWSPIDER_MODULE = 'woshipm.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# scrapy-redis相关配置,该部分具体说明,请参照上篇博客 https://dream.blog.csdn.net/article/details/107228400
# Scrapy-Redis相关配置
# 确保request存储到redis中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

SCHEDULER_PERSIST = True
# 设置redis为item pipeline
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 300
}
# 设置连接redis信息
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
REDIS_ENCODING = 'utf-8'
DOWNLOAD_DELAY = 3
复制代码

Inicie o redis e busque o endereço pela primeira vez com lpush

Inicie o redis, entre no diretório raiz do redis, use redis-server.exe redis.windows.confpara iniciar redis-cli , no diretório raiz, use redis-cli -h 127.0.0.1 -p 6379para conectar, porque meu redis local não define uma senha, para que eu possa conectar diretamente.

Adicione o endereço através do comando lpush 127.0.0.1:6379> lpush pm_url http://www.woshipm.com/archive/page/1.

As etapas acima foram concluídas e um rastreador distribuído básico foi escrito

Testar se o rastreador está funcionando corretamente

Abra o pm.pyarquivo e modifique as regras de correspondência de URL da seguinte forma

    rules = (
        # 获取分页,注意修改完善,本篇就不对LinkExtractor做过多的解读,以后有机会基于scrapy写一些深入讲解的博客
        # http://www.woshipm.com/archive/page/2 
        Rule(LinkExtractor(allow=r'page/\d+'), callback='parse_item', follow=True),
    )

    redis_key = 'pm_url'
    def parse_item(self, response):
        item = {}
        item['titles'] = response.xpath('//h2[@class="post-title"]').get()
        return item
复制代码

Há um buraco no código acima que precisa ser observado. Este problema é na verdade um problema de conhecimento básico de python

regras = (), onde regras é uma tupla, cuidado para não perder a vírgula. ,Se você perdê-la, a seguinte mensagem de erro aparecerá'Rule' object is not iterable

Tutorial introdutório do rastreador Python 74-100 Compactação, compactação ou ** compactação distribuída do Python

Há muitas maneiras de iniciar o rastreador. Aqui, insira a pasta onde pm.py está localizado e inicie-o com o seguinte comando

D:\python100\venv\Scripts\scrapy.exe runpider pm.py

Se não houver nenhum problema, você verá a seguinte tela

Tutorial introdutório do rastreador Python 74-100 Compactação, compactação ou ** compactação distribuída do Python

Ajuste os dados para garantir que não haja problemas

pm.pyVerifique se o núcleo xpathestá correto

class PmSpider(RedisCrawlSpider):
    name = 'pm'
    # allowed_domains = ['xxx.com']
    # start_urls = ['http://xxx.com/']

    rules = (
        # 获取分页
        # http://www.woshipm.com/archive/page/2
        Rule(LinkExtractor(allow=r'page/\d+'), callback='parse_item', follow=True),
    )

    redis_key = 'pm_url'

    def parse_item(self, response):

        links =  response.xpath('//h2[@class="post-title"]/a')
        for title in links:
            item = WoshipmItem(
                title=title.xpath('./text()').get(),
            )
            print(item)
            yield item
复制代码

O resultado da execução é o seguinte

Tutorial introdutório do rastreador Python 74-100 Compactação, compactação ou ** compactação distribuída do Python

escreva nas costas

Quando o programa é executado, a velocidade de rastreamento é muito rápida. Mais de 300 páginas de dados são rastreadas em menos de 1 minuto. Espero que este blog possa ajudá-lo a entender o rastreador distribuído novamente.

Guess you like

Origin juejin.im/post/7084062278643318820