Запрашиваемая настройка 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__))), ".."))

и сохранить его в тех же настройках.

Теперь скребок работает правильно.

Вернуться на верх