spider docs python-2.7 scrapy scrapyd

python-2.7 - docs - scrapy ruby



Scrapy obtener url solicitud en parse (5)

Debe anular la función make_requests_from_url(url) de BaseSpider para asignar el start_url al elemento y luego usar las teclas especiales Request.meta para pasar ese elemento a la función de parse

from scrapy.http import Request # override method def make_requests_from_url(self, url): item = MyItem() # assign url item[''start_url''] = url request = Request(url, dont_filter=True) # set the meta[''item''] to use the item in the next call back request.meta[''item''] = item return request def parse(self, response): # access and do something with the item in parse item = response.meta[''item''] item[''other_url''] = response.url return item

Espero que ayude.

¿Cómo puedo obtener la url de solicitud en la función parse() Scrapy? Tengo muchas URL en start_urls y algunas de ellas redirigen mi araña a la página de inicio y, como resultado, tengo un elemento vacío. Así que necesito algo como el item[''start_url''] = request.url para almacenar estas URL. Estoy usando el BaseSpider.


En lugar de almacenar las URL solicitadas en algún lugar y también las URL procesadas de forma no procesada no están en la misma secuencia que se proporciona en start_urls .

Usando abajo,

response.request.meta[''redirect_urls'']

le dará la lista de redireccionamiento que ocurrió como [''http://requested_url'',''https://redirected_url'',''https://final_redirected_url'']

Para acceder a la primera URL de la lista anterior, puede utilizar

response.request.meta[''redirect_urls''][0]

Para más información, vea doc.scrapy.org mencionado como:

RedirectMiddleware

This middleware handles redirection of requests based on response status.

Las direcciones URL por las que pasa la solicitud (mientras se redirige) se pueden encontrar en la clave Request.meta redirect_urls .

Espero que esto te ayude


La variable de "respuesta" que se pasa a parse () tiene la información que desea. No deberías tener que anular nada.

p.ej. (EDITADO)

def parse(self, response): print "URL: " + response.request.url


Python 3.5

Scrapy 1.5.0

from scrapy.http import Request # override method def start_requests(self): for url in self.start_urls: item = {''start_url'': url} request = Request(url, dont_filter=True) # set the meta[''item''] to use the item in the next call back request.meta[''item''] = item yield request # use meta variable def parse(self, response): url = response.meta[''item''][''start_url'']


Se puede acceder al objeto de solicitud desde el objeto de respuesta, por lo tanto, puede hacer lo siguiente:

def parse(self, response): item[''start_url''] = response.request.url