ImproperlyConfigured: 请求的设置 INSTALLED_APPS,但是设置尚未配置 - Scraper

9 浏览
0 Comments

ImproperlyConfigured: 请求的设置 INSTALLED_APPS,但是设置尚未配置 - Scraper

当我尝试在Django中运行我的爬虫时,我遇到了以下错误。这是在我尝试使用内置的Django模型将抓取的数据放入数据库时发生的。

追踪和错误:

/usr/bin/python3.6 /home/xxxxxx/Desktop/project/teo/movierater/scrap.py
Traceback (most recent call last):
  File "/home/xxxxxx/Desktop/project/teo/movierater/scrap.py", line 7, in 
    from teo.movierater.api.models import *
  File "/home/xxxxxx/Desktop/project/teo/movierater/api/models.py", line 3, in 
    class Author(models.Model):
  File "/usr/local/lib/python3.6/dist-packages/django/db/models/base.py", line 103, in __new__
    app_config = apps.get_containing_app_config(module)
  File "/usr/local/lib/python3.6/dist-packages/django/apps/registry.py", line 252, in get_containing_app_config
    self.check_apps_ready()
  File "/usr/local/lib/python3.6/dist-packages/django/apps/registry.py", line 134, in check_apps_ready
    settings.INSTALLED_APPS
  File "/usr/local/lib/python3.6/dist-packages/django/conf/__init__.py", line 79, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.6/dist-packages/django/conf/__init__.py", line 64, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: 请求设置INSTALLED_APPS,但设置未配置。您必须在访问设置之前定义环境变量DJANGO_SETTINGS_MODULE或调用settings.configure()。

我将它放在bin/activate中:

export DJANGO_SETTINGS_MODULE=mysite.settings

下面是scraper.py中的代码片段:

import django
import os
import requests
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from teo.movierater.api.models import *
os.environ['DJANGO_SETTINGS_MODULE'] = 'movierater.settings'
django.setup()

当我在django.setup()之前尝试导入模型时:

import django
import os
import requests
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
os.environ['DJANGO_SETTINGS_MODULE'] = 'movierater.settings'
django.setup()
from teo.movierater.api.models import *

错误:

ModuleNotFoundError: 找不到名为'movierater'的模块

我的项目结构和设置:

enter image description here

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'movierater.api',
]

wsgi.py文件:

import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'movierater.settings')
application = get_wsgi_application()

0
0 Comments

出现这个问题的可能原因有以下几点:

1. `DJANGO_SETTINGS_MODULE`的值应该设置为`movierater.settings`,可以使用命令`export DJANGO_SETTINGS_MODULE=movierater.settings`进行设置。需要注意的是,`movierater`的位置必须在`PYTHONPATH`中。

2. 检查启动应用的方式,是否尝试过使用`python manage.py shell`命令启动。可以参考链接中的解决方法。

3. 如果想将抓取器作为脚本启动(例如`python manage.py scraper`),最好的方式是编写一个自定义命令。可以参考链接中的解决方法。

解决方法如下:

1. 在终端中运行`export DJANGO_SETTINGS_MODULE=movierater.settings`设置`DJANGO_SETTINGS_MODULE`环境变量。

2. 检查启动应用的方式,尝试使用`python manage.py shell`命令启动。

3. 如果需要将抓取器作为脚本启动,可以编写一个自定义命令。可以参考链接中的解决方法。

注意:以上命令和解决方法适用于Linux环境。

0