Класс модели xxx не объявляет явную метку app_label и не находится в приложении в INSTALLED_APPS

#python #django #web-scraping #scrapy

Вопрос:

Я пытаюсь интегрироваться scrapy с django . Я новичок в джанго и не могу понять, что я сделал не так. Я читал предыдущие вопросы, но ни один из ответов, похоже, не решает мою проблему.

Я продолжаю получать эту ошибку

вызов ошибки времени выполнения( ошибка времени выполнения: электронные письма класса модели.модели.Электронная почта не объявляет явную метку app_label и не находится в приложении в INSTALLED_APPS.

email_spider.py

 from scrapyy.items import EmailItem

class firstSpider(scrapy.Spider): 
    name = "emails"
    ...
    def parse(self, response):
       ...
        item = EmailItem()
        item['email'] = text_list2

       ...
process = CrawlerProcess()
process.crawl(firstSpider)
process.start()
 

item.py

 import scrapy
from scrapy_djangoitem import DjangoItem
from emails.models import Email

class EmailItem(DjangoItem):
    django_model = Email

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'scrapyy',
    'emails',
]
 

emails/models.py

 from django.db import models

# Create your models here.
class Email(models.Model):
    email = models.CharField(max_length=100)
 

Редактировать

 > Traceback (most recent call last):   File
> "C:UsersFacilOrdiAppDataLocalProgramsPythonPython39librunpy.py",
> line 197, in _run_module_as_main
>     return _run_code(code, main_globals, None,   File "C:UsersFacilOrdiAppDataLocalProgramsPythonPython39librunpy.py",
> line 87, in _run_code
>     exec(code, run_globals)   File "C:UsersFacilOrdiDesktopvenvScriptsscrapy.exe__main__.py", line
> 7, in <module>   File
> "c:usersfacilordidesktopvenvlibsite-packagesscrapycmdline.py",
> line 144, in execute
>     cmd.crawler_process = CrawlerProcess(settings)   File "c:usersfacilordidesktopvenvlibsite-packagesscrapycrawler.py",
> line 280, in __init__
>     super().__init__(settings)   File "c:usersfacilordidesktopvenvlibsite-packagesscrapycrawler.py",
> line 152, in __init__
>     self.spider_loader = self._get_spider_loader(settings)   File "c:usersfacilordidesktopvenvlibsite-packagesscrapycrawler.py",
> line 146, in _get_spider_loader
>     return loader_cls.from_settings(settings.frozencopy())   File "c:usersfacilordidesktopvenvlibsite-packagesscrapyspiderloader.py",
> line 67, in from_settings
>     return cls(settings)   File "c:usersfacilordidesktopvenvlibsite-packagesscrapyspiderloader.py",
> line 24, in __init__
>     self._load_all_spiders()   File "c:usersfacilordidesktopvenvlibsite-packagesscrapyspiderloader.py",
> line 51, in _load_all_spiders
>     for module in walk_modules(name):   File "c:usersfacilordidesktopvenvlibsite-packagesscrapyutilsmisc.py",
> line 88, in walk_modules
>     submod = import_module(fullpath)   File "C:UsersFacilOrdiAppDataLocalProgramsPythonPython39libimportlib__init__.py",
> line 127, in import_module
>     return _bootstrap._gcd_import(name[level:], package, level)   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import   File
> "<frozen importlib._bootstrap>", line 1007, in _find_and_load   File
> "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked 
> File "<frozen importlib._bootstrap>", line 680, in _load_unlocked  
> File "<frozen importlib._bootstrap_external>", line 850, in
> exec_module   File "<frozen importlib._bootstrap>", line 228, in
> _call_with_frames_removed   File "C:UsersFacilOrdiDesktopscrapingscrapyyscrapyyspidersemail_spider.py",
> line 7, in <module>
>     from scrapyy.items import EmailItem   File "C:UsersFacilOrdiDesktopscrapingscrapyyscrapyyitems.py", line
> 8, in <module>
>     from emails.models import Email   File "C:Users/FacilOrdi/Desktop/scrapingemailsmodels.py", line 4, in
> <module>
>     class Email(models.Model):   File "c:usersfacilordidesktopvenvlibsite-packagesdjangodbmodelsbase.py",
> line 113, in __new__
>     raise RuntimeError( RuntimeError: Model class emails.models.Email doesn't declare an explicit app_label and isn't in an application in
> INSTALLED_APPS.
 

вот структура моего проекта

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

1. Похоже, вы импортируете модели из emails своего scrapyy проекта, в этом случае вам следует поменять местами импорт, так INSTALLED_APPS = [ ..., 'emails', 'scrapyy'] что .

2. все та же ошибка

3. йем: не могли бы вы предоставить полную обратную связь? Вы перезапустили сервер?

4. @WillemVanOnsem Я отредактировал вопрос

5. Похоже, вы запускаете файл python и, следовательно, не через manage.py него сначала загружаете приложения.

Ответ №1:

Чтобы решить эту проблему, я создал команду управления, как предложил @WillemVanOnsem

электронные письма/управление/команды/mycommand

 import os
import sys

from django.core.management.base import BaseCommand
from scrapy import cmdline


class Command(BaseCommand):
    def handle(self, *args, **options):
        sys.path.insert(0, 'C:/Users/FacilOrdi/Desktop/scraping/scrapyy')
        os.environ['SCRAPY_SETTINGS_MODULE'] = 'scrapyy.scrapyy.settings'
        cmdline.execute("scrapy crawl emails".split())
 

В командной строке я запускаю :

 python manage.py mycommand