2013-12-16 49 views
2

我有一個蜘蛛書寫,將刮一個網頁和填充項目中的字段。該項目具有如下字段如何訂購scrapy中的項目字段xml?

class exampleitem(): 
    ex1 = Field() 
    ex2 = Field() 
    ex3 = Field() 
    ... and so forth 

當我湊和導出到XML文件,成爲搞砸字段的順序,並返回這樣的事情

<items> 
    <item> 
     <ex2> <value> xyz </value> </ex2> 
     <ex3> <value> abc </value> </ex3> 
     <ex1> <value> ghi </value> </ex1> 
    </item> 
    ... so forth 
</items> 

我想要讓這個xml被格式化爲它爲我的item.py文件寫入Fields()中的順序。

我一直在研究過去的一個小時左右,我知道它與我的管道和利用xmlitemexporter有關,但我不知道如何自定義使我的管道,甚至從哪裏開始。

總之,我迷失在行話中,如果有人能指出我的方向或給我一個簡短的示例代碼,說明我可以如何開始格式化我的報廢物品,我會很感激!

謝謝你這麼多

回答

5

scrapy Items是蟒蛇字典的包裝,並將在不可預測的順序

def keys(self): 
    return self._values.keys() 

改變,你可以重寫此功能在您的物品,如回報的項目領域:

class exampleitem(Item): 
    ex1 = Field() 
    ex2 = Field() 
    ex3 = Field() 

    def keys(self): 
     return ['ext1', 'ext2', 'ext3'] 

,或者在一個更通用的方法來實現DictItem和使用Python的OrderedDict代替python目前使用的默認字典。

+0

你應該把你的名字從@Guy改爲上帝。非常感謝!我不知道這存在... –

+0

我試圖用這種方法來訂購我的CSV導出字段,但它沒有奏效。有任何想法嗎? – not2qubit

+0

沒有以什麼方式工作?使用鏈接來查看DictItem代碼,看到'fields = {}',這是一個普通的Python代碼行,當詢問它的鍵時,它會以任意的順序返回它們,我建議強制這個字段的順序,鍵(自己)'函數返回,如果當然,你將不得不從你的項目類的字段名稱更改這些領域,我希望它有幫助。 –