2016-01-03 35 views
0

這是我得到蟒蛇創建JSON字符串拋出一個異常

ERROR:scrapy.core.scraper:Error processing {'action': u'Rent', 
'ad_images': [bla bla bla], 
'ad_link': u'does_not_exit_in_this_website', 
'ad_title': u'boa bra bra', 
'agent_fees': 2300.0, 
'amenities': u'boa bra bra', 
'area': u'does_not_exit_in_this_website', 
'bathrooms': 1.0, 
'bedrooms': u'1', 
'building': u'', 
'category': u'Apartment', 
'city': -1, 
'commission': u'does_not_exit_in_this_website', 
'coordinates': u'does_not_exit_in_this_website', 
'country': u'', 
'ded_licence_number': u'718652', 
'description': u'Description:', 
'furnished': u'No', 
'latitude': -1, 
'link': u'bla bla bla', 
'location': u'', 
'longitude': -1, 
'mobile': u'does_not_exit_in_this_website', 
'payment_type': u'does_not_exit_in_this_website', 
'phone': u'', 
'phoneticarea': u'does_not_exit_in_this_website', 
'phoneticbuilding': u'does_not_exit_in_this_website', 
'phoneticsubarea': u'does_not_exit_in_this_website', 
'posting_date': u'2016-01-04', 
'price': u'does_not_exit_in_this_website', 
'price_sqft': u'does_not_exit_in_this_website', 
'property_reference': u'Ramzi', 
'rent_is_paid': u'Quarterly', 
'rera_registration_number': u'15691', 
'security_deposit': u'does_not_exit_in_this_website', 
'size': 1000.0, 
'source': u'dubizzleproperty', 
'subarea': u'does_not_exit_in_this_website', 
'trade_name': u'BLUE HOME PROPERTIES', 
'type': u'does_not_exit_in_this_website', 
'yearly_cost': 43000.0} 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/twisted/internet/defer.py", line 588, in _runCallbacks 
    current.result = callback(current.result, *args, **kw) 
    File "bra bra bla/pipelines.py", line 70, in process_item 
    body = '{"building": "{0}", "area" : "{1}", "subarea" : "{2}", "country" : "{3}", "city" : "{4}", "payment_type" : "{5}", "category" : "{6}", "phoneticbuilding" : "{7}", "phoneticarea" : "{8}", "phoneticssubarea": "{9}" }'.format(building, area, subarea, country, city, payment_type, category, phoneticbuilding, phoneticarea, phoneticssubarea) 
KeyError: '"building"' 

,如果你想知道管道文件的行70,在這裏你去的錯誤:

body = '{"building": "{0}", "area" : "{1}", "subarea" : "{2}", "country" : "{3}", "city" : "{4}", "payment_type" : "{5}", "category" : "{6}", "phoneticbuilding" : "{7}", "phoneticarea" : "{8}", "phoneticssubarea": "{9}" }'.format(building, area, subarea, country, city, payment_type, category, phoneticbuilding, phoneticarea, phoneticssubarea) 
+0

爲什麼你自己格式化JSON而不是使用庫?只要插入的元素包含由JSON解釋的任何內容,您的自我改造解決方案也會中斷。 –

+0

@UlrichEckhardt一個好主意,你有什麼建議嗎? –

+0

使用Python的JSON庫?搜索網頁! –

回答

1

由於@arthur說您需要用兩個括號替換單個大括號。我想補充一點,你應該這樣做的,這將是JSON字符串的鍵值文本:

例如(字符串的短版),替換:

body = '{"building": "{0}", "area" : "{1}" }'.format(building, area) 

有:

body = '{{"building": "{0}", "area" : "{1}" }}'.format(building, area) 
0

嘗試轉義身體的非格式{}括號。

編輯:這意味着將它們替換爲{{}}。請參閱How can I print literal curly-brace characters in python string and also use .format on it?

+0

這些對於創建JSON文件非常重要,否則,它不會是JSON格式的字符串。你不覺得嗎? –

+0

__Escaping__(不是刪除,用'{{'和'}}替換)將避免'.format'將括號解釋爲替換指令。它們是保留字符。 –

+0

如果您知道此body ='\ {「building」:「{0}」,「area」:「{1}」,「subarea」:「{2}」,「country」:「{3}」, 「city」:「{4}」,「payment_type」:「{5}」,「category」:「{6}」,「phoneticbuilding」:「{7}」,「phoneticarea」:「{8}」, 「phoneticssubarea」:「{9}」\}'。格式(建築物,地區,分區,國家,城市,付款類型,類別,語音建築,語音區域,語音區域) –