Относительная ошибка при импорте предметов в Scrapy - PullRequest
2 голосов
/ 13 марта 2020

Я учу Python и как использовать Scrapy. Я чистил "http://quotes.toscrape.com/", и все работало хорошо, пока я не попытался упорядочить данные, используя элементы. Кажется, ошибка:

from ..items import QuotetutorialItem

ImportError: attempted relative import with no known parent package"

Я не смог найти правильный способ импорта предметов, поэтому ваша помощь будет высоко оценена!

Вот код моих пауков:

import scrapy
from ..items import QuotetutorialItem

class QuoteSpider(scrapy.Spider):
    name = "quotes"                                                    
    start_urls = ["http://quotes.toscrape.com/"]

    def parse(self, response):

         items = QuotetutorialItem()                                  
         all_div_quotes = response.css("div.quote")                   

         for quotes in all_div_quotes:                                

            title = quotes.css("span.text::text").extract()
            author = quotes.css(".author::text").extract()
            tag = quotes.css(".tag::text").extract()

            items["title"] = title
            items["author"] = author
            items["tag"] = tag

            yield items

Код items.py:

import scrapy


class QuotetutorialItem(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()
    author = scrapy.Field()
    tag = scrapy.Field()

А вот и структура:

enter image description here

1 Ответ

1 голос
/ 13 марта 2020

Почему я обычно советую - добавить путь вашего проекта к PYTHONPATH:

export PYTHONPATH="${PYTHONPATH}:/path/to/quotetutorial/"

и внутри вашего quotes_spider.py используйте:

from quotetutorial.items import QuotetutorialItem

Теперь, если вы хотите импортировать пакет в items.py от скажем quotes_spider.py, следующее должно помочь:

from quotetutorial.spiders.quotes_spider import QuotetutorialItem

В качестве альтернативы, также будет работать следующее:

export PYTHONPATH="${PYTHONPATH}:/path/to/quotetutorial/quotetutorial/"

и затем:

from items import QuotetutorialItem

или

from spiders.quotes_spider import QuotetutorialItem
...