Проблема Scrapy: UnboundLocalError: локальная переменная, на которую ссылаются перед назначением

#python #python-3.x #web-scraping #scrapy

#python #python-3.x #очистка веб-страниц #scrapy

Вопрос:

Я пытаюсь улучшить свои навыки в веб-обработке, но я застрял в своем скрипте. Я хочу получить некоторую информацию об Amazon.

Вот мой сценарий до сих пор :

 import scrapy

from ..items import AmazontutorialItem


class AmazonSpiderSpider(scrapy.Spider):
    name = 'amazon'
    page_number = 2
    start_urls = ['https://www.amazon.com/s?bbn=1amp;rh=n:283155,n:!1000,n:1,p_n_publication_date:1250226011amp;dcamp;fst=as:offamp;qid=1606224210amp;rnid=1250225011amp;ref=lp_1_nr_p_n_publication_date_0']

    def parse(self, response):
        items = AmazontutorialItem()

        product_name = response.css('.a-color-base.a-text-normal::text').extract()
        product_author = response.css('.sg-col-12-of-28 span.a-size-base  .a-size-base::text').extract()
        product_price = response.css('.a-spacing-top-small .a-price-whole::text').extract()
        product_imagelink = response.css('.s-image::attr(src)').extract()

        items['product_name'] = product_name
        items['product_author'] = product_author
        items['product_price'] = product_price
        items['product_imagelink'] = product_imagelink

        yield items

        next_page = 'https://www.amazon.com/s?i=stripbooksamp;bbn=1amp;rh=n:283155,n:1000,n:1,p_n_publication_date:1250226011amp;dcamp;page='   str(AmazonSpiderSpider.page_number)   'amp;fst=as:offamp;qid=1606229780amp;rnid=1250225011amp;ref=sr_pg_2'
        if AmazonSpiderSpider.page_number <= 3:
            AmazonSpiderSpider  = 1
            yield response.follow(next_page, callback = self.parse)
 

Но я получаю эту ошибку :

 UnboundLocalError: local variable 'AmazonSpiderSpider' referenced before assignment
 

Я не понимаю, у меня никогда не было этой ошибки раньше, даже при веб-обработке.

Есть идеи? Спасибо.

Комментарии:

1. AmazonSpiderSpider — это имя класса, но вы не создали экземпляр объекта

Ответ №1:

Вы пытаетесь получить доступ page_number из класса AmazonSpiderSpider внутри самого класса. Вы пытаетесь сделать это с AmazonSpiderSpider.page_number помощью, что, скорее всего, не удастся. То, что вы намеревались сделать, вероятно, было access self.page_number .

Следующее должно устранить вашу проблему:

 import scrapy
from ..items import AmazontutorialItem


class AmazonSpiderSpider(scrapy.Spider):
    name = 'amazon'
    page_number = 2
    start_urls = ['https://www.amazon.com/s?bbn=1amp;rh=n:283155,n:!1000,n:1,p_n_publication_date:1250226011amp;dcamp;fst=as:offamp;qid=1606224210amp;rnid=1250225011amp;ref=lp_1_nr_p_n_publication_date_0']

    def parse(self, response):
        items = AmazontutorialItem()

        product_name = response.css('.a-color-base.a-text-normal::text').extract()
        product_author = response.css('.sg-col-12-of-28 span.a-size-base  .a-size-base::text').extract()
        product_price = response.css('.a-spacing-top-small .a-price-whole::text').extract()
        product_imagelink = response.css('.s-image::attr(src)').extract()

        items['product_name'] = product_name
        items['product_author'] = product_author
        items['product_price'] = product_price
        items['product_imagelink'] = product_imagelink

        yield items

        next_page = 'https://www.amazon.com/s?i=stripbooksamp;bbn=1amp;rh=n:283155,n:1000,n:1,p_n_publication_date:1250226011amp;dcamp;page='   str(self.page_number)   'amp;fst=as:offamp;qid=1606229780amp;rnid=1250225011amp;ref=sr_pg_2'
        if self.page_number <= 3:
            self.page_number  = 1
            yield response.follow(next_page, callback = self.parse)
 

Комментарии:

1. Вы просто забыли AmazonSpiderSpider в ссылке next_page, но я все равно понял, это работает! Большое вам спасибо 🙂

2. Ах, это верно. Спасибо, что сказали мне, и добро пожаловать!