yield
используется внутри функции, чтобы остановить ее выполнение, временно приостановить ее выполнение и переместить управление вызывающей функции.
Во-первых, код, который вы разместили, не выдает ошибку, о которой вы говорите, потому что при написании вопроса вы фактически выделили ключевое слово yeild
внутри тела функции.
Однако ваша программа не будет работать так, как задумано, поскольку она семантически неверна. Вам нужно отступить yield
дальше внутри for
l oop.
import scrapy
class FlashDealsSpider(scrapy.Spider):
name = 'flash_deals'
allowed_domains = ['www.geekbuying.com']
start_urls = ['https://www.geekbuying.com/deals/categorydeals']
def parse(self, response):
items = response.xpath("//div[@class='flash_li']")
for product in items:
product_name = product.xpath(".//a[@class='flash_li_link']/text()").get()
product_sale_price = product.xpath(" .//div[@class='flash_li_price']/span/text()").get()
product_org_price = product.xpath(".//div[@class='flash_li_price']/del/text()").get()
product_url = product.xpath(".//a[@class='flash_li_link']/@href").get()
discount = product.xpath(".//div[@class='category_li_off']/text()").get()
yield {
'name': product_name,
'sale_price': product_sale_price,
'orginal_price': product_org_price,
'url': product_url,
'discount': discount
}
next_page = response.xpath("//a[@class='next']/@href").get()
if next_page:
yield response.follow(url=next_page, callback=self.parse)