模型 class xxx 未显式声明 app_label 并且不在 INSTALLED_APPS 中的应用程序中
Model class xxx doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS
我正在尝试将 scrapy
与 django
整合。我是 django 的新手,我不知道自己做错了什么。
我已阅读之前的问题,但 none 的答案似乎解决了我的问题。
我一直收到这个错误
raise RuntimeError(
RuntimeError: Model class emails.models.Email doesn't declare an explicit app_label and isn't in an application in 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:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\runpy.py",
> line 197, in _run_module_as_main
> return _run_code(code, main_globals, None, File "C:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\runpy.py",
> line 87, in _run_code
> exec(code, run_globals) File "C:\Users\FacilOrdi\Desktop\venv\Scripts\scrapy.exe\__main__.py", line
> 7, in <module> File
> "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\cmdline.py",
> line 144, in execute
> cmd.crawler_process = CrawlerProcess(settings) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 280, in __init__
> super().__init__(settings) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 152, in __init__
> self.spider_loader = self._get_spider_loader(settings) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 146, in _get_spider_loader
> return loader_cls.from_settings(settings.frozencopy()) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 67, in from_settings
> return cls(settings) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 24, in __init__
> self._load_all_spiders() File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 51, in _load_all_spiders
> for module in walk_modules(name): File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\utils\misc.py",
> line 88, in walk_modules
> submod = import_module(fullpath) File "C:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\importlib\__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:\Users\FacilOrdi\Desktop\scraping\scrapyy\scrapyy\spiders\email_spider.py",
> line 7, in <module>
> from scrapyy.items import EmailItem File "C:\Users\FacilOrdi\Desktop\scraping\scrapyy\scrapyy\items.py", line
> 8, in <module>
> from emails.models import Email File "C:\Users/FacilOrdi/Desktop/scraping\emails\models.py", line 4, in
> <module>
> class Email(models.Model): File "c:\users\facilordi\desktop\venv\lib\site-packages\django\db\models\base.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.
here is the structure of my project
为了解决这个问题,我按照@WillemVanOnsem 的建议创建了一个管理命令
emails/management/commands/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
我正在尝试将 scrapy
与 django
整合。我是 django 的新手,我不知道自己做错了什么。
我已阅读之前的问题,但 none 的答案似乎解决了我的问题。
我一直收到这个错误
raise RuntimeError( RuntimeError: Model class emails.models.Email doesn't declare an explicit app_label and isn't in an application in 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:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\runpy.py",
> line 197, in _run_module_as_main
> return _run_code(code, main_globals, None, File "C:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\runpy.py",
> line 87, in _run_code
> exec(code, run_globals) File "C:\Users\FacilOrdi\Desktop\venv\Scripts\scrapy.exe\__main__.py", line
> 7, in <module> File
> "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\cmdline.py",
> line 144, in execute
> cmd.crawler_process = CrawlerProcess(settings) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 280, in __init__
> super().__init__(settings) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 152, in __init__
> self.spider_loader = self._get_spider_loader(settings) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\crawler.py",
> line 146, in _get_spider_loader
> return loader_cls.from_settings(settings.frozencopy()) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 67, in from_settings
> return cls(settings) File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 24, in __init__
> self._load_all_spiders() File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\spiderloader.py",
> line 51, in _load_all_spiders
> for module in walk_modules(name): File "c:\users\facilordi\desktop\venv\lib\site-packages\scrapy\utils\misc.py",
> line 88, in walk_modules
> submod = import_module(fullpath) File "C:\Users\FacilOrdi\AppData\Local\Programs\Python\Python39\lib\importlib\__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:\Users\FacilOrdi\Desktop\scraping\scrapyy\scrapyy\spiders\email_spider.py",
> line 7, in <module>
> from scrapyy.items import EmailItem File "C:\Users\FacilOrdi\Desktop\scraping\scrapyy\scrapyy\items.py", line
> 8, in <module>
> from emails.models import Email File "C:\Users/FacilOrdi/Desktop/scraping\emails\models.py", line 4, in
> <module>
> class Email(models.Model): File "c:\users\facilordi\desktop\venv\lib\site-packages\django\db\models\base.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.
here is the structure of my project
为了解决这个问题,我按照@WillemVanOnsem 的建议创建了一个管理命令
emails/management/commands/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