1

我设法编写了一个从网页抓取数据的 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 脚本中调用刮板,然后该脚本还将生成的 JSON 固定装置加载到我的数据库中。这就像放一些东西一样简单:

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 项目,该脚本是否必须位于任何特定位置才能正常工作?

4

1 回答 1

1
  1. 正是这样。在 pipelines.py 中定义一个自定义的 item 管道,根据需要输出 item 数据,然后在 settings.py 中添加管道类。scrapy 文档有一个可能有用的JSONWriterPipeline 示例
  2. 好吧,基于您示例中的脚本取自 scrapy 文档,它应该可以工作。你试过了吗?
  3. 只要所有必要的导入都有效,位置应该无关紧要。您可以通过在所需位置触发 Python 解释器然后一一检查所有导入来测试这一点。如果它们都运行正确,那么脚本应该没问题。

如果出现任何问题,请在此处发布另一个问题,其中包含相关代码和尝试过的内容,我相信有人会很乐意提供帮助。:)

于 2013-02-02T19:52:10.523 回答