我按照this教程学习了有关刮刮的Web刮擦。尽管许多部分已经过时,即使在针对项目检查了pull requests打开之后,我还是遇到了一些问题。不过,我确实遵循了说明,并再次使用Python 3(而不是2.7)和最新的组件开始了该项目。我读了一些草率的文档,并使其与我感兴趣的站点之一一起工作,但是有一个问题。
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
语句
答案 0 :(得分:1)
DATABASE
未在documentation中列出,并且尝试使用import settings
或import scrapy.settings
导入它失败。我将其与以下代码一起使用,同时将数据保留在settings.py中:
import scrape_tut.settings
def db_connect():
return create_engine(URL(**myproject.settings.DATABASE))