一次运行Scrapy脚本,处理输出并加载到数据库中?

时间:2013-02-02 18:06:20

标签: django scrapy

我设法编写了一个Scrapy项目,用于从网页上删除数据,当我在命令行使用scrapy crawl dmoz -o items.json -t json调用它时,它成功地将已删除的数据输出到JSON文件。

然后我写了另一个脚本,它接受JSON文件,加载它,改变数据的组织方式(我不喜欢它的组织的默认方式),并将其作为第二个JSON文件吐出。然后我使用Django的manage.py loaddata fixture.json命令将第二个文件的内容加载到Django数据库中。

现在,我感觉我会在三个单独的步骤中被大笑出来,但是我不太确定如何将它们整合到一个脚本中。首先,我不能让我的Scrapy项目以我想要的方式输出我的数据,这似乎真的很愚蠢。但是,我在哪里放置代码来修改Feed exports输出数据的'默认'方式?它会进入我的pipelines.py文件吗?

其次,我想从python脚本中调用scraper,然后将生成的JSON fixture加载到我的数据库中。这就像放置类似的东西一样简单:

from twisted.internet import reactor  
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log
from testspiders.spiders.followall import FollowAllSpider

spider = FollowAllSpider(domain='scrapinghub.com')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()

在我的脚本的顶部,然后用以下内容跟随它:

from django.something.manage import loaddata

loaddata('/path/to/fixture.json')

?最后,相对于我的Django项目和Scrapy项目,该脚本是否有任何特定的位置才能正常工作?

1 个答案:

答案 0 :(得分:1)

  1. 正是如此。在pipelines.py中定义自定义项管道以根据需要输出项数据,然后将管道类添加到settings.py。 scrapy文档有JSONWriterPipeline example可能有用。
  2. 嗯,基于您的示例中的脚本来自scrapy文档,它应该可以工作。你试过吗?
  3. 只要所有必要的导入都有效,位置就无所谓了。您可以通过在所需位置触发Python解释器然后逐个检查所有导入来测试这一点。如果它们都运行正常,那么脚本应该没问题。
  4. 如果出现任何问题,请在此处发布另一个问题,其中包含相关代码以及尝试过的内容,我确信有人会很乐意为您提供帮助。 :)