ImproperlyConfigured: 请求的设置 INSTALLED_APPS,但是设置尚未配置 - Scraper
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, infrom 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'的模块
我的项目结构和设置:
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()
出现这个问题的可能原因有以下几点:
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环境。