#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. Ах, это верно. Спасибо, что сказали мне, и добро пожаловать!