#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