【发布时间】:2014-02-28 16:41:45
【问题描述】:
我正在从他们的official doc 学习Scrapy(一个网络爬虫框架)。
通过以下示例和文档,我创建了我的蜘蛛来使用站点地图抓取数据
from scrapy.contrib.spiders import SitemapSpider
from scrapy.selector import Selector
from MyProject1.items import MyProject1Item
class MySpider(SitemapSpider):
name="myspider"
sitemap_urls = ['http://www.somesite.com/sitemap.xml']
sitemap_follow = ['/sitemapbrowsesection\d+']
count=0
def parse(self, response):
self.count=self.count+1
item=MyProject1Item()
sel=Selector(response)
item["exp"]=sel.xpath('/html/head/title/text()').extract()
print str(self.count)+":\t"+response.url
print sel.xpath('/html/head/title/text()').extract()
print "\n\n"
我可以通过运行命令在屏幕上看到带有日志的抓取结果scrapy crawl myspider
我可以通过在命令中添加选项将抓取的结果保存到 json/csv/xml 文件scrapy crawl myspider -o item.json -t json 以在json 文件中获取结果。
我的问题是,只有当scrapy 完成爬行时,scrapy 才会将抓取的结果转储到 item.json。意味着必须等到爬行结束。所以对于大型项目我将不得不等待很长时间,因为我猜scrapy会在完成所有爬取后将抓取结果写入json文件。
我希望 scrapy 立即或几乎立即或在抓取过程中写入 json 文件,以便在 scrapy 运行时查看已抓取网站的结果。
我知道scrapy中一定有一些我无法捕捉到的东西。我试图从http://doc.scrapy.org/en/latest/topics/feed-exports.html获得帮助
和
http://doc.scrapy.org/en/latest/topics/exporters.html
但无法解决我的问题。所以我正在寻找一些帮助或示例代码,否则我必须在 parse(self, response) 函数中添加几行来创建 json/csv 文件并将报废的结果写入其中。
【问题讨论】: