Запрашиваемая настройка LOGGING_CONFIG при использовании scrapy с django
Я новичок в интеграции scrapy и django, однако я пытаюсь сделать что-то простое, чтобы начать работать с этими двумя инструментами. По сути, я хочу получать заголовки с веб-сайта, модели будут читать это, а представления будут загружать это в базовый html-шаблон.
Однако я получаю эту ошибку, когда запускаю scrapy crawl test
django.core.exceptions.ImproperlyConfigured: Запрошена настройка LOGGING_CONFIG, но настройки не настроены. Вы должны либо определить переменную окружения DJANGO_SETTINGS_MODULE, либо вызвать settings.configure() перед доступом к настройкам.
.
Вот мое дерево:
── cruise_control
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-38.pyc
│ ├── admin.cpython-38.pyc
│ ├── apps.cpython-38.pyc
│ ├── models.cpython-38.pyc
│ ├── urls.cpython-38.pyc
│ └── views.cpython-38.pyc
├── admin.py
├── apps.py
├── migrations
│ ├── 0001_initial.py
│ ├── __init__.py
│ └── __pycache__
│ ├── 0001_initial.cpython-38.pyc
│ └── __init__.cpython-38.pyc
├── models.py
├── templates
│ └── cruise_control
│ └── basic.html
├── tests.py
├── urls.py
└── views.py
── cruises
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-38.pyc
│ ├── settings.cpython-38.pyc
│ └── urls.cpython-38.pyc
├── asgi.py
├── scraper
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-38.pyc
│ │ └── settings.cpython-38.pyc
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ ├── __init__.py
│ └── test.py
├── scrapy.cfg
├── settings.py
├── urls.py
└── wsgi.py
Вот некоторые из частей: models.py
from django.db import models
class Cruises(models.Model):
title = models.CharField(max_length=200)
views.py
from django.shortcuts import render
from .models import Cruises
def basic(request):
long_list = Cruises.objects.values('title')
return render(request, 'cruise_control/basic.html', context = {'long_list':long_list})
urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('',views.basic, name = 'basic')
]
scraper:
pipelines.py
from itemadapter import ItemAdapter
from cruise_control.models import Cruises
def clean_title(param):
return param
class ScraperPipeline:
def process_item(self, item, spider):
title = clean_title(item['title'])
Cruises.objects.create(
title=title)
return item
items.py
import scrapy
from scrapy_djangoitem import DjangoItem
from cruise_control.models import Cruises
class ScraperItem(DjangoItem):
django_model = Cruises
settings.py
import django
django.setup()
BOT_NAME = 'scraper'
SPIDER_MODULES = ['scraper.spiders']
NEWSPIDER_MODULE = 'scraper.spiders'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
'scraper.pipelines.ScraperPipeline': 100,
}
Вот что сработало для меня
Я включил следующее в файл settings.py внутри scraper
:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'cruises.settings'
Это устранит ошибку, которую я получал.
Во-вторых, я получал ошибку the module cruises is not found
. Поэтому мне пришлось установить прямой путь для этого, используя:
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), ".."))
и сохранить его в тех же настройках.
Теперь скребок работает правильно.