Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuáles son los pasos para que Scrapy utilice el rendimiento para devolver la Solicitud?

¿Cuáles son los pasos para que Scrapy utilice el rendimiento para devolver la Solicitud?

El rendimiento de Python es una palabra clave bastante inusual. >>>?def?test_yield():

...para,i,en,rango(3):

...rendimiento?i

...

>>>?test_yield()

Obviamente, el rendimiento es diferente del retorno . Las funciones que contienen rendimiento no devuelven, sino que generan un objeto. Este objeto se llama generador. De hecho, cuando se llama a la función test_yield, el bucle for en test_yield no se ejecuta. En cambio, cada vez que encuentra un campo, se detiene antes de ejecutar el campo. Cuando se llama al siguiente método del generador, se ejecuta el campo. devuelve inmediatamente seguido de La variable después del campo. >>>?gen?=?test_yield()

>>>?gen.next()

>>>?gen.next()

1

>>.

1

>>?gen.next()

2

> >>?gen.next()

Traceback(most.recent.call.last): ¿Archivo?

StopIteration

Como puede ver, al regresar 2, el bucle for en el generador ha finalizado y no hay campos en la función para ejecutar, por lo que a continuación se genera una excepción StopIteration, que marca el final del generador.

De hecho, los generadores también se pueden iterar a través de bucles. >>>?para?cada uno?en?test_yield():

...imprimir?cada uno

...

1

2

xrange en Python es diferente de range. Produce una lista, mientras que xrange produce un generador. >>>?rango(3)

[0,?1,?2]

>>>?xrango(3)

xrango(3)

En Scrapy, las arañas analizan las páginas web mediante campos. Por supuesto, es posible analizar la página web sin utilizar rendimiento, pero es necesario devolver una lista de todas las Solicitudes o Elementos analizados de la Respuesta entrante.

def?parse(self,?response):

sel?=?Selector(respuesta)

for?url?in?sel.xpath(' //a/@href').extract():

rendimiento?Request(url)

o clase?DemoSpider(Spider):

nombre? =?' demostración'

...

def?parse(self,?respuesta):

sel?=?Selector(respuesta)

solicitudes?=?[]

for?url?in?sel.xpath('//a/@href').extract():

solicitudes. append(Request(url))

return?requests

En resumen, devuelve un objeto iterable.

Entonces, ¿por qué existe algo llamado rendimiento? ¿No puede simplemente devolver una lista? Imagínese, si desea devolver una lista que contiene cientos o miles de elementos, consumirá muchos recursos y tiempo de la computadora. Esta situación se puede mitigar si se utiliza el rendimiento.

El código anterior solo se aplica a Python2.