2013-11-03 27 views
1

我使用Python框架scrapy報廢的數據,這裏是我的蜘蛛代碼:如何使用特殊字符報廢數據?

def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    sites = hxs.select('//h1') 
    links = hxs.select('//div[@class="pp-title"]') 
    #sites = hxs.select('//div[@id="yt-lockup-content"] ') 

    items = [] 
    for site in links: 
     item = DmozItem() 
     item['title'] = site.select('a/h1/text()').extract() 
     item['link'] = site.select('a/@href').extract() 

     items.append(item) 

    return items 

我收集items.json數據與這種蜘蛛,我跑蜘蛛命令scrapy crawl dmoz -o items.json -t json。數據被存儲在格式

[[{"link": ["http://www.ponudadana.hr/Planinarski-dom-Kalnik-2-dana-s-doruckom-za-dvoje-za-149kn-umjesto-300kn-7482_1"], "title": ["Planinarski dom Kalnik - 2 dana s doru\u010dkom za dvoje za 149kn umjesto 300kn!"]}, 

的問題是,像č,ž,š,đ,ž特殊字符被存儲爲\u010或類似的,例如參見以上doru\u010dkom字,它應該是doručkom。任何人都可以幫助我,我應該使用一些編碼格式?

+0

您能否在第一行修復縮進錯誤。 – scriptmonster

回答

1

無論是JSON還是Python unicode字符串文字,\u010d意味着č。即使它在JSON中表現得如此,當它解碼時,它也會以適當的字母č出現。

>>> import json 
>>> obj = json.loads("""{"link": ["http://www.ponudadana.hr/Planinarski-dom-Kalnik-2-dana-s-doruckom-za-dvoje-za-149kn-umjesto-300kn-7482_1"], "title": ["Planinarski dom Kalnik - 2 dana s doru\u010dkom za dvoje za 149kn umjesto 300kn!"]}""") 
>>> obj['title'] 
[u'Planinarski dom Kalnik - 2 dana s doru\u010dkom za dvoje za 149kn umjesto 300kn!'] 
>>> print obj['title'][0] 
Planinarski dom Kalnik - 2 dana s doručkom za dvoje za 149kn umjesto 300kn! 

Python字符串相同。

>>> u"česnakas" 
u'\u010desnakas' 
>>> print u"česnakas" 
česnakas 
+0

我試過,但得到這個錯誤文件 「mongodb.py」 25行,在 blaz1988

+0

這是我的用於打印的代碼:json_data =開放( 'items.json') 數據= json.load(json_data) 用於數據d: 鏈接= d [ '鏈路'] [0] 鏈路= link.strip() 標題= d [ '標題'] [0] 標題= title.strip() 打印標題 打印鏈路 – blaz1988

+0

AFAIK'charmap'表示Windows CMD的問題並沒有很好地處理unicode。 – justinas