我在使用 Scrapy 爬取网站数据并将其保存到 Django 数据库。我想根据用户提供的域名运行爬虫,将数据存储在 Django 数据库中。
我参考了以下资料:
- [link 1](link 1)
- [link 2](link 2)
- [link 3](link 3)
但是,我尝试了 8 个多小时,仍然无法解决问题。
我注意到有两种方法可以将数据从 Scrapy 保存到 Django 数据库:一种是使用 DjangoItem,另一种是直接导入模型。
我尝试了以下代码:
def setup_django_env(path):
import imp, os
from django.core.management import setup_environ
f, filename, desc = imp.find_module('settings', [path])
project = imp.load_module('settings', f, filename, desc)
setup_environ(project)
setup_django_env('/Users/Anders/DjangoTraining/wsgi/')
但我遇到了以下错误:
ImportError: No module named settings
我认为可能是因为我错误地定义了 Django 项目的路径。
我还尝试了以下代码:
setup_django_env('../../')
但仍然没有成功。
2. 解决方案
根据答主1的回答,我意识到主要的误解是软件包路径和设置模块路径不同。如果要从外部脚本中使用 django 的模型,需要设置 DJANGO_SETTINGS_MODULE。然后,这个模块必须是可以导入的(即,如果设置路径是 myproject.settings,那么在 Python shell 中应该可以正常运行 from myproject import settings 语句)。
因为大多数 Django 项目创建在默认 PYTHONPATH 之外的路径中,所以必须将项目的路径添加到 PYTHONPATH 环境变量中。
以下是在 Scrapy 项目中完全集成 Django 模型的分步指南:
- 在目录 /home/rolando/projects 中创建 Django 项目。
- 创建 Scrapy 项目。
- 在 Scrapy 项目的 items.py 中创建 Item。
- 在 Scrapy 项目的 settings.py 中设置环境变量。
- 创建 Spider。
- 在 Scrapy 项目的 pipelines.py 中创建 pipeline。
- 在 Scrapy 项目的 settings.py 中添加 pipeline 设置。
- 运行 Spider。
根据答主2的回答,我了解到即使没有完整的 Django 项目,也可以让 scrapy 与 Django 模型(又称 Django ORM)一起工作。我的 scrapy 项目称为 scrapping。
在 scrapy settings.py 文件中添加以下代码:
from django.conf import settings as d_settings
d_settings.configure(
DATABASES={
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'my_password',
'HOST': 'localhost',
'PORT': '',
}},
INSTALLED_APPS=(
'scrapping',
)
)
在 scrapy 项目的文件夹中创建一个 manage.py 文件:
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "scrapping.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
在 scrapy 项目文件夹中创建 models.py 文件。
在 scrapy 项目文件夹中创建 items.py 和 pipeline.py 文件。
现在,就可以使用 scrapy 爬取网站数据并将其保存到 Django 数据库中。