Я следовал этому уроку, чтобы узнать о соскобах в сети с помощью скрапа. Многие части устарели, хотя даже после проверки открытых запросов на извлечение проекта у меня возникло несколько проблем. Хотя я выполнил задание и снова начал проект с Python 3 (вместо 2.7) и обновленными компонентами. Я немного прочитал в документации по scrapy и заставил работать с одним из моих сайтов, хотя есть одна проблема.
Вопрос
models.py содержит следующий код:
from sqlalchemy.engine.url import URL
import settings
def db_connect():
return create_engine(URL(**settings.DATABASE))
Это дает NameError: name 'settings' is not defined
при запуске с scrapy crawl my_spider -o items.json
Попытка другого решения, предложенного здесь на StackExchange:
from sqlalchemy.engine.url import URL
from scrapy.utils.project import get_project_settings
def db_connect():
settings = get_project_settings()
return create_engine(URL(**settings.DATABASE))
Результат: AttributeError: 'Settings' object has no attribute 'DATABASE'
После успешного устранения всех других ошибок мне пришлось заменить код.
return create_engine("postgresql://scrape:123456@localhost:5432/scrape")
Это работает, все остальное в порядке. Может кто-нибудь сказать мне, пожалуйста, каков рекомендуемый подход для получения информации и построения строки подключения? Я бы предпочел хранить данные конфигурации в settings.py , но я открыт для других решений, если есть проблема с этим. Пожалуйста, поделитесь некоторым пониманием.
settings.py:
DATABASE = {
'drivername': 'postgres',
'host': 'localhost',
'port': '5432',
'username': 'scrape',
'password': '123456',
'database': 'scrape'
}
Обзор проекта:
├── __init__.py
├── items.py
├── middlewares.py
├── models.py
├── pipelines.py
├── settings.py
└── spiders
├── my_spider.py
└── __init__.py
Редактировать: Добавлено from sqlalchemy.engine.url import URL
заявление