Tutorial introductorio del rastreador de Python Compactación distribuida de Python, compactación o compactación **

¡Acostúmbrate a escribir juntos! Este es el octavo día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

escribe al frente

Para el aprendizaje de rastreadores distribuidos, o para el aprendizaje técnico, no hay atajos. Hay dos maneras de hacerlo. Primero, puede practicar repetidamente y puede hacerlo perfecto; segundo, mire el código compartido por otros y aprenda el método de escritura de otras personas. repetidamente hasta que lo haga usted mismo.

En el último blog, creo que puede ejecutar fácilmente el rastreador distribuido. Puede encontrar que el rastreador distribuido es un ajuste en el pensamiento. No hay muchos cambios en la escritura del código, pero debe saber que usamos scrapy: el rastreador distribuido El rastreador construido directamente por Redis es equivalente a pararse sobre los hombros de los predecesores y escalar la pared distribuida, pero como primer paso de "construir" para comprender el rastreador distribuido, hemos logrado este hito, y luego tomaremos este Los hitos se compactan más para facilitar la escalada posterior.

A continuación, usaré alrededor de 3 casos y seguiré repitiendo el método de escritura del rastreador distribuido hasta que no haya ningún truco.

Encuentre un sitio web para referencia hoy 人人都是产品经理, haga una declaración 不好意思,学习目的,爬来的数据会及时的删除滴.

Construir un rastreador distribuido

Crear un proyecto de rastreador scrapy

scrapy.exe proyecto de inicio woshipm

Cree un proyecto de rastreador a través del comando anterior. Tenga en cuenta que si su scrapy.exe no está configurado con variables de entorno, ubique scrapy.exe a través de la ruta completa y luego ejecute el comando

Cree CrawlSpiderun

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

Al crear un archivo de rastreador a través del comando anterior, debe prestar atención para ingresar la carpeta de araña en el proyecto de rastreador. De lo contrario, debe copiar el pm.pyarchivo y pegarlo en la carpeta de araña.

Los dos pasos anteriores se han implementado y la estructura de directorio actual es la siguiente

Tutorial introductorio del rastreador de Python 74-100 Compactación distribuida de Python, compactación o compactación **

Modifique el archivo pm.py al contenido básico del rastreador distribuido

Los resultados finales de la modificación son los siguientes, preste atención al contenido de los comentarios.

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 el archivo setting.py para agregar la parte redis

El resultado final de la modificación es el siguiente

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 redis y obtenga la dirección por primera vez con lpush

Inicie redis, ingrese al directorio raíz de redis, use redis-server.exe redis.windows.confpara iniciar redis-cli, en el directorio raíz, use redis-cli -h 127.0.0.1 -p 6379para conectarse, porque mi redis local no establece una contraseña, por lo que puedo conectarme directamente.

Agregue la dirección a través del comando lpush 127.0.0.1:6379> lpush pm_url http://www.woshipm.com/archive/page/1.

Se han completado los pasos anteriores y se ha escrito un rastreador distribuido básico.

Comprobar si el rastreador funciona correctamente

Abra el pm.pyarchivo y modifique las reglas de coincidencia de URL de la siguiente manera

    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
复制代码

Hay un hoyo en el código anterior al que se debe prestar atención. Este problema es en realidad un problema de conocimiento básico de python.

rules = (), donde rules es una tupla, tenga cuidado de no perder la coma, ,si la pierde, aparecerá el siguiente mensaje de error'Rule' object is not iterable

Tutorial introductorio del rastreador de Python 74-100 Compactación distribuida de Python, compactación o compactación **

Hay muchas maneras de iniciar el rastreador. Aquí, ingrese la carpeta donde se encuentra pm.py, y luego inícielo con el siguiente comando

D:\python100\venv\Scripts\scrapy.exe ejecuta la araña pm.py

Si no hay ningún problema, verá la siguiente pantalla

Tutorial introductorio del rastreador de Python 74-100 Compactación distribuida de Python, compactación o compactación **

Ajuste los datos para asegurarse de que no haya ningún problema.

pm.pyCompruebe si el núcleo xpathes correcto

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
复制代码

El resultado de ejecución es el siguiente

Tutorial introductorio del rastreador de Python 74-100 Compactación distribuida de Python, compactación o compactación **

escribir en la parte de atrás

Cuando se ejecuta el programa, la velocidad de rastreo es muy rápida. Se rastrean más de 300 páginas de datos en menos de 1 minuto. Espero que este blog pueda ayudarlo a comprender nuevamente el rastreador distribuido.

Supongo que te gusta

Origin juejin.im/post/7084062278643318820
Recomendado
Clasificación