¡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 CrawlSpider
un
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.py
archivo y pegarlo en la carpeta de araña.
Los dos pasos anteriores se han implementado y la estructura de directorio actual es la siguiente
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.conf
para iniciar redis-cli, en el directorio raíz, use redis-cli -h 127.0.0.1 -p 6379
para 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.py
archivo 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
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
Ajuste los datos para asegurarse de que no haya ningún problema.
pm.py
Compruebe si el núcleo xpath
es 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
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.