2013-09-23 34 views
0

我正在使用Scrapy進行網絡抓取。在<code>標籤之間的類似網站已經嵌入了JSON:json.loads失敗,「沒有JSON對象可以被解碼」

<code id="content" style="display:none;"><!--{"content": "text1",...,..., "compute": "text2"}--></code> 

使用XPath,我能提取裏面<code>標籤註釋。使用:

hxs.select("//code[@id='content']/comment()").extract() 

後分條評論文字,內容有content = "{"content": "text1",...,..., "compute": "text2"}"

在建設使用json.loads(內容)JSON,我得到"ValueError: No JSON object could be decoded"錯誤。

另外,STR(內容)拋出:在106512

"UnicodeEncodeError: 'ascii' codec can't encode characters in position 106512-106513: ordinal not in range(128)"

值是預先'\xa7'

感謝。

+0

你可以發佈'print(content)'的輸出嗎? –

+0

它的大,大約280500個字符。但是我已經打印了106512的值。 – rajpy

+0

'UnicodeEncodeError'可能與'ValueError'無關。顯然你的'content'是'unicode'(不是'str')和'str()'扼流圈,但是'json.loads'沒有必要。但是你可以嘗試'json.loads(content.encode('utf-8'))'(或其他適當的編碼)。 –

回答

0

json中的字符串似乎是iso8859或Windows-1252。 \ xa7是其中一種編碼,而\ xc2 \ xa7是utf-8中的一種。

2

str(content)預期不會出現非ASCII字符,本身也不是問題。如果你想要的是一個字節的字符串(雖然它打印到控制檯是另一回事(PrintFails)。如果你只是想告訴我們什麼在變,打印repr(comment)得到了Python語法表示content.encode('utf-8')會工作。

No JSON object could be decoded意味着json.loads甚至不能找到的東西,看起來像JSON字符串的開始,所以看那個repr()字符串的前面,看是否有在{之前的任何雜散字符或控制代碼。

+0

謝謝。 repr(內容)輸出不顯示任何雜散字符。它的輸出:>>'\'{「content」:「text1」,...,...,「compute」:「text2」}「。 – rajpy

+0

是'print repr(content)'的輸出嗎?如果它完全像你粘貼的一樣,那麼會有一些纏繞的'''字符會阻止它被解析;如果它只是'>>> repr(content)'(即你已經粘貼了repr的repr),那麼就有前後空格,我無法解釋。 – bobince

+0

抱歉,輸出來自python解釋器。爲了清晰起見,我已經放置了前/後空格。 print repr(內容)顯示'{「content」:「text1」,..,「compute」:「text2」}'。所以,內容是正確的我的意思是在開始時沒有流浪的字符。 – rajpy

相關問題