Scrapy запрашивает URL-адрес в сеансе

Как я могу получить URL запроса в функции анализа Scrapy? У меня много URL-адресов в start_urls, и некоторые из них перенаправляют мой паук на домашнюю страницу, и в результате у меня есть пустой элемент. Поэтому для хранения этих URL-адресов мне нужно использовать item['start_url'] = request.url. Я использую BaseSpider.

Ответы

Ответ 1

Переменная "response", которая передается в parse(), содержит нужную вам информацию. Вам не нужно ничего переоценивать.

например. (Edited)

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

Ответ 2

Объект запроса доступен из объекта ответа, поэтому вы можете сделать следующее:

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

Ответ 3

Вам нужно переопределить BaseSpider make_requests_from_url(url) function, чтобы назначить start_url этому элементу, а затем использовать Request.meta специальные клавиши передать этот элемент функции 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

Надеюсь, что это поможет.

Ответ 4

Вместо того, чтобы хранить запрошенный URL-адрес где-то, а также обработанный обработкой URL-адрес, не в той же последовательности, как указано в start_urls.

Используя ниже,

response.request.meta['redirect_urls']

предоставит вам список переадресаций, как ['http://requested_url','https://redirected_url','https://final_redirected_url']

Чтобы получить доступ к первому URL из списка выше, вы можете использовать

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

Подробнее см. doc.scrapy.org, упомянутый как:

RedirectMiddleware

This middleware handles redirection of requests based on response status.

URL-адреса, которые запрос отправляет (при перенаправлении), можно найти в redirect_urls Request.meta​​strong > .

Надеюсь, это поможет вам