【发布时间】:2021-10-23 08:43:37
【问题描述】:
我正在尝试将scrapy 与django 集成。我是 django 的新手,我不知道我做错了什么。
我已经阅读了以前的问题,但似乎没有一个答案可以解决我的问题。
我不断收到此错误
引发 RuntimeError( RuntimeError: 模型类 emails.models.Email 没有明确声明 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',
]
电子邮件/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.
【问题讨论】:
-
看起来你在
scrapyy项目中从emails导入模型,在这种情况下你应该交换导入,所以INSTALLED_APPS = [ ..., 'emails', 'scrapyy']。 -
还是同样的错误
-
是的:你能请完整的回溯。您重新启动服务器了吗?
-
@WillemVanOnsem 我编辑了问题
-
看起来您正在运行一个 python 文件,因此不是通过
manage.py将首先加载应用程序。
标签: python django web-scraping scrapy