我希望能够在 Django 中运行Scrapy 网络爬虫框架。Scrapy 本身只提供了一个命令行工具scrapy
来执行它的命令,也就是说,该工具不是故意编写为从外部程序调用的。
用户Mikhail Korobov提出了一个不错的解决方案,即从 Django 自定义管理命令调用 Scrapy。为方便起见,我在这里重复他的解决方案:
# -*- coding: utf-8 -*-
# myapp/management/commands/scrapy.py
from __future__ import absolute_import
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def run_from_argv(self, argv):
self._argv = argv
return super(Command, self).run_from_argv(argv)
def handle(self, *args, **options):
from scrapy.cmdline import execute
execute(self._argv[1:])
scrapy crawl domain.com
我现在可以python manage.py scrapy crawl domain.com
在 Django 项目中进行,而不是调用 eg 。但是,Scrapy 命令的选项根本不被解析。如果我这样做python manage.py scrapy crawl domain.com -o scraped_data.json -t json
,我只会得到以下响应:
Usage: manage.py scrapy [options]
manage.py: error: no such option: -o
所以我的问题是,如何扩展自定义管理命令以采用 Scrapy 的命令行选项?
不幸的是,Django这部分的文档不是很丰富。我还阅读了 Python 的optparse 模块的文档,但之后对我来说并不清楚。任何人都可以在这方面帮助我吗?提前非常感谢!