SyntaxError: 'yield' вне функции Python Spider Script - Scrapy - PullRequest
0 голосов
/ 04 апреля 2020

Я попытался запустить следующий скрипт-паук, чтобы попытаться отсканировать данные о geekbuying, но столкнулся с ошибкой - SyntaxError: 'yield' вне функции .

# -*- coding: utf-8 -*-
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)

Кто-нибудь знает, как разрешить эту синтаксическую ошибку?

Заранее спасибо!

1 Ответ

0 голосов
/ 04 апреля 2020

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...