2011-09-01 48 views
1

目前我與scrapy,這是一個基於Python的網頁抓取框架內工作。使用XPATH從html中提取數據。 (我是python的新手)要包裝數據scrapy使用項目,例如在python處理字符串了奇怪的引號

item = MyItem() 

item['id'] = obj.select('div[@class="id"]').extract() 

當ID印像print item['id']我獲得以下輸出

[u'12346'] 

我的問題是,這種輸出並不總是以相同的形式。有時候,我得到這樣

"[u""someText""]" 

出現這種情況只與文本的輸出,但實際上並沒有什麼speciall相比於被corretly處理就像ID其他文本。

有誰知道引號是什麼意思?就像我所說的那樣,someText像所有其他文本數據一樣被抓取,例如from

<a>someText</a> 

任何想法?

編輯:

我的蜘蛛抓取博客中的所有頁面。這裏是確切的輸出

[u'41039'];[u'title] 

[u'40942'];"[u""title""]"] 

... 

item['title'] = site.select('div[@class="header"]/h2/a/@title').extract() 

提取我注意到,總是相同的博客文章有這個引號。所以他們不會隨機出現。但是文本沒有什麼特別之處。例如。這個稱號產生引號

<a title="Xtra Pac Telekom web'n'walk Stick Basic für 9,95" href="someURL"> 
    Xtra Pac Telekom web'n'walk Stick Basic für 9,95</a> 

所以,我首先想到的是,這是因爲一些特殊的字符,但有任何的arent。

只有當項目被寫入到CSV,當我把它們打印在cmd中沒有引號這happeny。

有什麼建議嗎?

+0

這是否總是發生的字符串?你能把它分解成一個可以發佈的特定測試用例嗎? – idbrii

+0

您複製並粘貼了這些確切的輸出嗎?你打印某些東西的報告者和其他人的普通版本嗎? –

回答

4

蟒可以使用單和雙報價爲引號。當它打印出來的東西它選擇單引號正常,但如果是打印的文本包含單引號將切換到雙引號(以避免逃避字符串中的引號):

所以通常情況下,它是印刷[u'....']但有時你必須包含字符的文本,然後將其打印[u"...."]

的。 n寫入csv有一個額外的複雜性。如果一個字符串被寫入csv,而該csv僅包含一個',那麼它就會按照原樣寫入。所以[u'....']寫爲[u'....']。如果它包含雙引號,則(1)所有內容都放在雙引號內,(2)任何雙引號重複兩次。所以u["..."]被寫爲"[u""...""]"。如果您使用csv庫讀取csv數據,則會檢測並刪除它,因此不會導致任何問題。

所以它是包含單引號(使python使用雙引號)和csv引用規則(適用於雙引號,但不是單引號)的文本的組合。

,如果這是一個問題的CSV圖書館有各種選項去改變 - http://docs.python.org/library/csv.html

wikipedia page詳細解釋了引號規則 - 這裏的behavuour通過例子顯示爲"Super, ""luxurious"" truck"

+0

感謝您對此非常好的解釋:) –