scrapy delta fetch无效

时间:2014-03-22 20:51:30

标签: python python-2.7 scrapy

我正在使用scrapy 0.20

我不想抓取已经删除过的网址。

我正在使用deltafetch插件。

我将其设为我的设置:

SPIDER_MIDDLEWARES = {
    'TestSpider.deltafetch.DeltaFetch': 100,
}
DELTAFETCH_ENABLED = True
DOTSCRAPY_ENABLED = True

但是蜘蛛一直在爬行已被刮掉的物品。

注意

在我的日志文件中。没有Ignoring already visited:,这是在deltafetch中记录的单词。因此,条件if self.db.has_key(key):永远不会成为现实

1 个答案:

答案 0 :(得分:0)

我会要求澄清,但我不能。所以我只想说,我遇到了同样的问题。我只是抓取一个站点并获取响应主体并将它们写入文件:

def parse_funstuff(self, response):
    filename = response.url.split("/")[-1]
    open(filename, 'wb').write(response.body)

scrapy + deltafetch没有将其视为抓取任何内容,因此未将其记录到deltafetch db。

如果您正在执行相同或类似的操作,请将文件下载作为项目实现(不确定如何执行此操作),或者像我一样实施解决方法;我只是在parse_funstuff中实现了一个项目,我用目标xml文件中的任意值填充。这将被写入输出xml文件“scrapy crawl test_fun --set FEED_FORMAT = xml”,这与我正在下载的xml文件不同。这样,scrapy + deltafetch会看到从每个.xml文件URL中删除了某些内容,并在后续抓取时忽略它。我在parse_funstuff中添加了以下内容:

    xxs = XmlXPathSelector(response)
    xxs.remove_namespaces()
    sites = xxs.select("//funstuff/morefun")
    items = []
    for site in sites:
        item = FunItem()
        item['stuff'] = site.select("//funstuff/FunStuff/funny/ID").extract()
        items.append(item)
    return items

这解决了scrapy + deltafetch的问题。检查你的日志并确保scrapy + deltafetch认为你实际上已经刮了一些东西,只是“GET”似乎不够,请确保你在日志中看到“Scraped from”。